2009-09-28 16 views
156

Eventuali duplicati:
Best way to check for “undefined” in JavaScript?se una variabile non è definito

Come faccio a sapere se una variabile non è definito?

Al momento ho:

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

indefinito è una struttura di JavaScript in modo doesn' t devono essere tra virgolette. Stai verificando se i valori sono effettivamente la stringa "indefinita". http://www.w3schools.com/jsref/jsref_undefined.asp – daddywoodland

+2

@daddywoodland: piccolo consiglio; non dovresti riferirti a W3Schools. Sono noti per aver fornito informazioni false e non sono una buona risorsa da consigliare agli altri. – TheCarver

+0

@PaparazzoKid cosa c'è di sbagliato in W3Schools? Pensi che il link sopra non sia corretto o hai altri esempi? Trovo che sia un riferimento utile, ovviamente non così autorevole come scavare attraverso un documento W3C, ma a volte hai solo bisogno di riferimenti rapidi. –

risposta

-7

Si può solo verificare direttamente la variabile. Se non definito, restituirà un valore 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() e .text() non restituiscono mai "non definito" per una selezione vuota. Restituisce sempre una stringa vuota (ad esempio ""). .html() restituirà null se l'elemento non esiste though.You bisogno di fare:

if(page_name != '') 

Per le altre variabili che non vengono da qualcosa di simile jQuery.val() si dovrebbe fare questo, però:

if(typeof page_name != 'undefined') 

Devi solo usare l'operatore typeof.

+10

if (undefinedVar) genererà un errore, ma se (someObj.undefinedProperty) non lo farà. In quest'ultimo caso, puoi anche saltare typeof e usare === undefined (o! ==), senza virgolette. – eyelidlessness

+1

E ti ho dato +1 per aver correttamente rilevato che i metodi di jQuery non torneranno indefiniti. – eyelidlessness

+0

Sì. Hai ragione riguardo alla parte var indefinita. – 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 
*/ 

Questo evita di usare typeof whatever === "undefined". (Inoltre, non c'è alcun concatenazione di stringhe.)

+3

Perché evitare 'typeof ...' una cosa buona? – rjmunro

86

if (var === undefined)

o più precisamente

if (typeof var === 'undefined')

Nota la === viene utilizzato

+64

Si prega di usare 'typeof (var) === 'undefined'' come' undefined' non è una costante in JavaScript. – JonnyReeves

+26

'typeof' non è una funzione - per favore non usare parentesi con esso. – rjmunro

+5

quindi questa risposta è valida o no? confuso dagli upvotes e dai commenti – Roy

Problemi correlati