Wenn Sie die Variable implizit ohne deklarieren var
, ist der richtige Weg, sie zu verwenden delete foo
.
Wenn Sie jedoch versuchen, dies in einem Vorgang wie dem Hinzufügen von a zu verwenden, ReferenceError
wird nach dem Löschen a ausgelöst, da Sie einem nicht deklarierten, nicht definierten Bezeichner keine Zeichenfolge hinzufügen können. Beispiel:
x = 5;
delete x
alert('foo' + x )
// ReferenceError: x is not defined
In einigen Situationen kann es sicherer sein, es false, null oder undefined zuzuweisen, damit es deklariert wird und diese Art von Fehler nicht auslöst.
foo = false
Beachten Sie, dass in ECMAScript null
, false
, undefined
, 0
, NaN
, oder ''
würde alles bewerten zu false
. Stellen Sie nur sicher, dass Sie nicht den !==
Operator verwenden, sondern stattdessen !=
bei der Typprüfung auf Boolesche Werte und Sie möchten keine Identitätsprüfung (so null
würde == false
und false == undefined
).
Beachten Sie auch, dass delete
keine Referenzen "gelöscht" werden, sondern nur Eigenschaften direkt auf dem Objekt, z.
bah = {}, foo = {}; bah.ref = foo;
delete bah.ref;
alert( [bah.ref, foo ] )
// ,[object Object] (it deleted the property but not the reference to the other object)
Wenn Sie eine Variable mit deklariert haben, var
können Sie sie nicht löschen:
(function() {
var x = 5;
alert(delete x)
// false
})();
In Rhino:
js> var x
js> delete x
false
Sie können auch einige vordefinierte Eigenschaften wie Math.PI
:
js> delete Math.PI
false
Es gibt einige merkwürdige Ausnahmen delete
wie bei jeder Sprache. Wenn Sie sich genug darum kümmern, sollten Sie lesen:
var
außerhalb einer Funktion), sind Eigenschaften des "globalen Objekts", das in Webbrowsern verwendet wirdwindow
. Also -var a = 1; delete window.a; console.log(a);
löscht die Variable erfolgreich und bewirkt, dass in der letzten Zeile ein Referenzfehler ausgegeben wird.