2013-02-26 11 views
7

Ich bin ein wenig verwirrt darüber, wie man am besten prüft, ob eine Variable in Javascript nicht definiert ist oder nicht. Ich habe es so gemacht:Suche nach undefined in Javascript - sollte ich typeof oder nicht?

myVar === undefined; 

Aber ist es in allen Fällen besser, typeof stattdessen zu verwenden?

typeof myVar === undefined; 

Und was ist mit der Verwendung von undefined vs "undefined", die ich auch gesehen habe?

+4

'typeof' gibt eine Zeichenfolge zurück, daher sollten Sie das Ergebnis mit '' undefined '' vergleichen, wenn Sie die Option verwenden strenger Vergleichsoperator. –

+1

Wenn Sie nur wissen möchten, ob 'myVar' einen nicht-falsy Wert hat, würde'! 'Ausreichen. (zB 'if (! myVar)' – marekful

+0

@ Frédéric Hamidi- danke für die Erklärung.) Benutzst (oder empfiehlst du) typeof in den meisten Fällen? Unter allen Umständen frage ich, weil ich 'myVar === gesehen habe undefined "verwendet in seriösen Büchern, weshalb ich es benutzt habe. – larryq

Antwort

14

Dies ist der beste Weg, um zu überprüfen - völlig narrensicher:

typeof myVar === "undefined" 

Das ist in Ordnung, aber es könnte scheitern, wenn jemand unhelpfully den globalen undefined Wert überschrieben:

myVar === undefined; 

Es muss sei gesagt, dass ECMAScript 5 spezifiziert, dass undefined schreibgeschützt ist, so dass das oben genannte immer sicher in jedem Browser ist, der konform ist.

Das wird nie funktionieren, weil es "undefined" === undefined (verschiedene Typen) Vergleich endet:

typeof myVar === undefined; 
+0

Warum ist das eine akzeptierte Antwort? Wenn AFAIK versucht, auf einen nicht definierten Speicherbereich zuzugreifen, wird immer ein ReferenceError in ES5 und ES6 ausgelöst: https://jsfiddle.net/Troop4Christ/on2oynvz/ und http://www.es6fiddle.net/ijls28o5/ – RavenHursT

+0

@RavenHursT: Das ist nicht der Punkt dieser Frage - obwohl gewährt, ist der Beispielcode in der Frage nicht der beste. Es ist mehr wie was passiert [hier] (https://jsfiddle.net/on2oynvz/1/). In Bezug auf 'ReferenceError' gibt es mindestens [diese Frage] (http://stackoverflow.com/q/9981104/50079), die es abdeckt, von dem ich weiß, weil ich dort auch eine Antwort habe. – Jon

2

Dieser Test würde immer wie erwartet:

typeof a === 'undefined' 

Da der Wert von undefined geändert werden kann, Tests wie diese sind nicht immer zuverlässig:

a = {} 
a.b === undefined 

In diesen Fällen könnte man gegen void 0 testen statt:

a.b === void 0 
// true 

Dies wird jedoch nicht für einzelne Variable Tests funktionieren:

a === void 0 // <-- error: cannot find 'a' 

Sie arbeiten rund um konnte, dass durch Tests gegen window.a, aber die erste Methode sollte bevorzugt werden.

0

Ich glaube, dass in den häufigsten Fällen, z.B. Bei der Überprüfung, ob ein Parameter durch eine Funktion übergeben wird, reicht myVar === undefined, da myVar immer als Parameter deklariert wird

Verwandte Themen