Die globale Eigenschaft undefined
repräsentiert den Wert undefined
. Dieser Wert ist einer der primitiven Typen in JavaScript.
Property attributes of undefined |
|
---|---|
Writable | no |
Enumerable | no |
Configurable | no |
Syntax
undefined
Beschreibung
undefined
ist eine Eigenschaft des globalen Objektes, was bedeutet, dass es eine Variable im globalen Gültigkeitsbereich ist. Der initiale Wert von undefined
ist der primitive Wert undefined
.
In modernen Browsern (JavaScript 1.8.5 / Firefox 4+) ist undefined
eine nicht konfigurierbare und nicht beschreibare Eigenschaft. Dieses ist in der ECMAScript 5 Spezifikation definiert. Immer wenn das nicht der Fall ist, sollte das Überschreiben von undefined
unterlassen werden.
Eine Variable, die nicht mit einem Wert beschrieben wurde, ist vom Typ undefined
. Methoden oder Anweisungen geben ebenfalls undefined
zurück, wenn eine Variable, die ausgewertet wird, mit keinem Wert beschrieben ist. Eine Funktion hat undefined
als Rückgabewert, wenn kein Wert zurückgegeben
wird.
Weil es möglich ist identifier (Variablennamen) in jedem anderen Scope anders zu definieren, ist es auch möglich undefin undefined
neu zu defnieren (weil undefined
kein reserviertes Schlüsselwort
) ist). Dieses einzusetzen ist jedoch keine gute Idee, weil der Quelltext dadurch nicht mehr auf den ersten blick lesbar ist.
// NICHT NACHMACHEN // gibt "foo string" aus (function(){ var undefined = 'foo'; console.log(undefined, typeof undefined); })(); // gibt "foo string" aus (function(undefined){ console.log(undefined, typeof undefined); })('foo');
Beispiele
Identität und undefined
Man kann undefined
in Verbindung mit dem Identitätsoperator nutzen, um den Wert von Variablen auf undefined
zu prüfen. Im folgenden Beispiel ist die Variable x
nicht definiert und die if-Anweisung wird zu true
ausgewertet.
var x; if (x === undefined) { // Diese Anweisung wird ausgeführt } else { // Diese Anweisung wird nicht ausgeführt }
x == undefined
) auch null zu einer positiven Auswertung führen würde. Für Details siehe Vergleichsoperatoren
Typeof
-Operator und undefined
Alternativ kann typeof
eingesetzt werden:
var x; if (typeof x === 'undefined') { // Diese Anweisung wird ausgeführt }
Ein Grund typeof
zu nutzen, ist, dass diese Variante keinen Fehler erzeugt, wenn eine Variable nicht definiert ist.
// x wurde nicht definiert if (typeof x === 'undefined') { // wird ohne Fehler zu true ausgewertet // Diese Anweisung wird ausgeführt } if(x === undefined){ // erzeugt einen ReferenceError }
Diese Technik sollte so oft es geht vermieden werden. JavaScript ist eine Sprache mit statischen Gültigkeitsbereichen, was bedeutet, dass eine Variable immer in seinem geschlossenen Kontext gelesen werden kann, egal ob sie existiert oder nicht. Die einzige Ausnahme ist der globale Gültigkeitsbereich, jedoch ist dieser an das globale Objekt gebunden, weshalb die Existenz einer Variablen auf dem globalen Objekt geprüft werden kann. Dafür kann der in
-Operator genutzt werden.
Void
-Operator und undefined
Der void
-Operator ist die dritte Alternative.
var x; if (x === void 0) { // Diese Anweisung wird ausgeführt } // y wurde nicht definiert if (y === void 0) { // erzeugt einen ReferenceError (im gegensatz zu `typeof`) }
Spezifikationen
Spezifikation | Status | Kommentar |
---|---|---|
ECMAScript 1st Edition (ECMA-262) Die Definition von 'undefined' in dieser Spezifikation. |
Standard | Initiale Definition. Implementiert in JavaScript 1.3 |
ECMAScript 5.1 (ECMA-262) Die Definition von 'undefined' in dieser Spezifikation. |
Standard | |
ECMAScript 2015 (6th Edition, ECMA-262) Die Definition von 'undefined' in dieser Spezifikation. |
Standard | |
ECMAScript 2017 Draft (ECMA-262) Die Definition von 'undefined' in dieser Spezifikation. |
Entwurf |
Browserkompatibilität
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support | (Ja) | (Ja) | (Ja) | (Ja) | (Ja) |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | (Ja) | (Ja) | (Ja) | (Ja) | (Ja) | (Ja) |