2009-12-31 8 views
39

Possible Duplicate:
Detecting an undefined object property in JavaScriptwie zu handhaben 'undefined' in Javascript

Von unten Javascript Probe

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

diese jsVar deklariert und in einem anderen js fein paraphiert.

Das Problem ist, dass Code einen undefinierten Fehler ausgibt, wenn dieser Code ausgeführt wird, bevor die andere Datei (wo sie deklariert und initiiert wird) ausgeführt wird. Deshalb ist es umgeben von Versuch und Fang.

Was ist der beste Weg, um diesen undefinierten Fehler als Versuch zu fangen?

Antwort

64

Sie können prüfen, die Tatsache mit

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

Hat das irgendeinen Vorteil gegenüber "meinem" Weg? –

+0

Es kann einen Fehler auslösen: jsVar ist nicht definiert. Sie sollten es so testen: if (window.jsVar! == undefined) {}. Es scheint, als würde typeof() diesen Fehler "fangen". –

+0

@Fabien: Oder vielleicht benutze if ("jsVar" im Fenster) {} ... aber ich würde Code vermeiden, der Codierung für diesen Fehlerfall erfordern würde. –

0

In Javascript, bewirkt, dass die folgenden Werte die, wenn die Bedingung zum Scheitern verurteilt und nicht seine Anweisung ausführen: null, nicht definiert, falsch, NaN, die Zahl 0 und die leeren Zeichenfolge ''.

Angenommen, die Variable jsVar ist ein boolescher Wert und die Methode proce(), wenn jsVar wahr ist, können wir folgendermaßen überprüfen.

Das obige Code-Snippet prüft zuerst, ob jsVar definiert wurde und prüft dann, ob der Wert wahr ist. Die if-Bedingung wird nur erfüllt, wenn beide Bedingungen erfüllt sind.

Wenn jsVar kein boolescher Wert ist, können wir die entsprechende Überprüfung anstelle von jsVar == true im obigen Code verwenden.

+0

Denken Sie daran, dass dies nicht nach booleschen "true" sucht, da Sie keinen strikten Vergleich verwenden (in JS ist z. B. "1" == true wahr); dies wird immer noch den Referenzfehler werfen, wenn die Variable nicht definiert wurde, dh Ihr Code löst Madhus Problem nicht – Christoph

+0

@Christoph Sie haben Recht! – Scott

8

Wie es oft der Fall mit JavaScript, gibt es mehrere Möglichkeiten, dies zu tun:

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

Die ersten beiden sollten gleichwertig sein (solange foo nicht durch eine lokale Variable im Schatten), während die Der letzte gibt true zurück, wenn die globale Variable definiert, aber nicht initialisiert (oder explizit auf undefined) gesetzt ist.

Verwandte Themen