Wenn eine Variable ohne Zuweisung eines Werts deklariert wird, lautet ihr Anfangswert undefined
.
Wie können Sie überprüfen, ob ein Wert in JavaScript undefined
ist?
Die kurze Antwort
In modernen Browsern können Sie die Variable sicher vergleichen direkt zu undefined
:
Einige Leute sprechen sich gegen einen Vergleich mit undefined
, weil alte Browser die Neuzuweisung des Werts wie folgt zuließen:
Nach dieser Neuzuweisung im Vergleich zu undefined
würde direkt nicht mehr korrekt erkennen, ob einer Variablen ein Wert zugewiesen wurde.
Dieses Verhalten wurde jedoch 2009 mit ECMAScript 5 behoben:
In modernen Browsern “ Es ist nicht mehr möglich, den globalen Wert undefined
neu zuzuweisen.
Was ist, wenn ich IE8 und älter unterstützen muss?
Im Allgemeinen direkt mit un vergleichen definiert ist immer noch sicher. Es gibt keinen praktischen Grund für eine Anwendung, den Wert von undefined
neu zuzuweisen.
Thomas Eding demonstriert dies mit einer überzeugenden Analogie:
Wenn Sie immer noch besorgt sind, gibt es zwei Möglichkeiten, um zu überprüfen, ob ein Wert undefiniert ist, auch wenn das globale undefined
überschrieben wurde.
Sie können das verwenden void-Operator zum Abrufen des Werts von undefined
. Dies funktioniert auch dann, wenn der globale Wert window.undefined
überschrieben wurde:
Die Null in diesem Beispiel hat keine besondere Bedeutung. Sie können auch 1
oder function(){}
. void(anything)
wertet immer undefined
aus.
Alternativ können Sie den Operator typeof verwenden, um sicher zu prüfen, ob ein Wert vorliegt wurde beauftragt. Anstatt mit dem globalen Wert undefined
zu vergleichen, überprüfen Sie, ob der Werttyp „undefiniert“ ist:
Beachten Sie, dass dies geringfügig von den vorherigen Optionen abweicht. Auch wenn name
nicht deklariert wurde, würde typeof
immer noch sagen, dass es undefiniert ist. Wenn Sie eine nicht deklarierte Variable mit undefined
oder void(0)
vergleichen, erhalten Sie stattdessen einen ReferenceError.
Aber nicht Verwenden Sie void (0) direkt.
Vermeiden Sie die Verwendung von void(0)
oder typeof x === "undefined"
wörtlich im Code. Diese Ausdrücke sind nicht selbsterklärend und sollten in eine isUndefined-Funktion wie diese eingeschlossen werden:
In vielen Dienstprogrammbibliotheken ist diese Funktionalität bereits integriert, z. B. gibt es eine _.isUndefined
Funktion in Underscore.js.