2009-09-28 23 views
156

Duplicar posible:
Best way to check for “undefined” in JavaScript?si una variable no está definida

¿Cómo puedo encontrar si una variable es indefinido?

Actualmente tengo:

var page_name = $("#pageToEdit :selected").text(); 
var table_name = $("#pageToEdit :selected").val(); 
var optionResult = $("#pageToEditOptions :selected").val(); 

var string = "?z=z"; 
if (page_name != 'undefined') { string += "&page_name=" + page_name; } 
if (table_name != 'undefined') { string += "&table_name=" + table_name; } 
if (optionResult != 'undefined') { string += "&optionResult=" + optionResult; } 
+3

indefinido es una propiedad de Javascript por lo que doesn' Necesito estar entre comillas. Está comprobando si los valores son realmente la cadena 'indefinida'. http://www.w3schools.com/jsref/jsref_undefined.asp – daddywoodland

+2

@daddywoodland: Pequeño consejo; no debería estar haciendo referencia a W3Schools. Son conocidos por dar información falsa y no es un buen recurso para recomendar a otros. – TheCarver

+0

@PaparazzoKid ¿Qué pasa con W3Schools? ¿Crees que el enlace de arriba es incorrecto o tienes otros ejemplos? Encuentro una referencia útil, obviamente no tan autorizada como buscar en un documento del W3C, pero a veces solo necesitas una referencia rápida. –

Respuesta

-7

Usted puede simplemente comprobar la variable directamente. Si no está definido, devolverá un valor de falsy.

var string = "?z=z"; 
if (page_name) { string += "&page_name=" + page_name; } 
if (table_name) { string += "&table_name=" + table_name; } 
if (optionResult) { string += "&optionResult=" + optionResult; } 
278

jQuery.val() y .text() nunca devolverá 'indefinido' para una selección vacía. Siempre devuelve una cadena vacía (es decir, ""). html() devolverá un valor nulo si el elemento no existe though.You tiene que hacer:

if(page_name != '') 

Para otras variables que no provienen de algo así como jQuery.val() podría hacer esto sin embargo:

if(typeof page_name != 'undefined') 

Solo tiene que utilizar el operador typeof.

+10

if (undefinedVar) arrojará un error, pero if (someObj.undefinedProperty) no lo hará. En este último caso, también puede omitir typeof y usar === undefined (o! ==), sin comillas. – eyelidlessness

+1

Y le di +1 para señalar correctamente que los métodos de jQuery no serán indefinidos. – eyelidlessness

+0

Sí. Tienes razón sobre la parte var indefinida. – ScottyUCSD

3
function my_url (base, opt) 
{ 
    var retval = ["" + base]; 
    retval.push(opt.page_name ? "&page_name=" + opt.page_name : ""); 
    retval.push(opt.table_name ? "&table_name=" + opt.table_name : ""); 
    retval.push(opt.optionResult ? "&optionResult=" + opt.optionResult : ""); 
    return retval.join(""); 
} 

my_url("?z=z", { page_name : "pageX" /* no table_name and optionResult */ }); 

/* Returns: 
    ?z=z&page_name=pageX 
*/ 

Esto evita usar typeof whatever === "undefined". (Además, no hay ninguna concatenación de cadenas.)

+3

¿Por qué evitar 'typeof ...' es algo bueno? – rjmunro

86

if (var === undefined)

o más precisamente

if (typeof var === 'undefined')

Nota se utiliza el ===

+64

Por favor, use 'typeof (var) === 'undefined'' como' undefined' no es una constante en JavaScript. – JonnyReeves

+26

'typeof' no es una función, no use corchetes con este. – rjmunro

+5

, ¿esta respuesta es válida o no? confundido por los upvotes y los comentarios – Roy

Cuestiones relacionadas