2009-12-31 14 views
39

Possible Duplicate:
Detecting an undefined object property in JavaScriptcome gestire 'undefined' in javascript

Dal sotto javascript campione

try { 
    if(jsVar) { 
    proceed(); 
     } 
}catch(e){ 
     alert(e); 
} 

questo jsVar viene dichiarato e siglato in un altro js fini.

Il problema è che il codice genera un errore non definito quando questo codice viene eseguito prima che venga eseguito l'altro file (dove è dichiarato e avviato). Questo è il motivo per cui è circondato da provare e prendere.

Qual è il modo migliore per gestire questo errore non definito di provare a catturare?

risposta

64

È possibile verificare il fatto con

if (typeof(jsVar) == 'undefined') { 
    ... 
} 
+0

Questo ha qualche vantaggio sul modo "mio"? –

+0

Potrebbe generare un errore: jsVar non è definito. Dovresti testarlo in questo modo: if (window.jsVar! == undefined) {}. Sembra che typeof() "catturi" questo errore. –

+0

@Fabien: O forse usa if ("jsVar" nella finestra) {} ... ma vorrei evitare il codice che richiederebbe la codifica per questo caso di errore. –

0

in JavaScript, i seguenti valori causerà la condizione if sicuro e non eseguire la sua dichiarazione: nullo, non definito, falso, NaN, il numero 0 e il vuoto stringa "".

Supponendo che la variabile jsVar sia un valore booleano e che si voglia chiamare il metodo proceed() quando jsVar è true, possiamo eseguire il seguente controllo.

if (jsVar && jsVar == true) 
    proceed(); 

Il codice precedente snippet primo controllo che jsVar è stato definito e quindi controlla che il suo valore è vero. La condizione if sarà soddisfatta solo se entrambe le condizioni sono soddisfatte.

Se jsVar non è un booleano, è possibile sostituire il controllo appropriato al posto di jsVar == true nel codice sopra.

+0

tieni presente che questo non controlla il valore booleano 'true' poiché non stai usando un confronto rigoroso (in JS, ad esempio' '1' == true' è vero!); questo causerà comunque l'errore di riferimento anche se la variabile non è stata definita, ovvero il tuo codice non risolve il problema di Madhu – Christoph

+0

@Christoph hai ragione! – Scott

8

Come spesso accade con JavaScript, ci sono diversi modi per farlo:

typeof foo !== 'undefined' 
window.foo !== undefined 
'foo' in window 

I primi due dovrebbero essere equivalenti (a patto che foo non sia coperto da una variabile locale), mentre il l'ultimo restituirà true se la variabile globale è definita, ma non inizializzata (o impostata in modo esplicito su undefined).

Problemi correlati