Jeśli domyślnie deklarujesz zmienną bez var, właściwym sposobem byłoby użycie delete foo.
Jednak po jego usunięciu próba użycia tego w operacji, takiej jak dodawanie, ReferenceErrorspowoduje wyrzucenie, ponieważ nie można dodać ciągu do niezadeklarowanego, niezdefiniowanego identyfikatora. Przykład:
x = 5;
delete x
alert('foo' + x )
// ReferenceError: x is not defined
W niektórych sytuacjach bezpieczniejsze może być przypisanie go do wartości false, null lub undefined, aby został zadeklarowany i nie generował tego typu błędu.
foo = false
Należy zauważyć, że w ECMAScript null, false, undefined, 0, NaN, lub ''by wszystko aby ocenić false. Po prostu upewnij się, że nie używasz !==operatora, ale zamiast tego !=podczas sprawdzania typu dla booleanów i nie chcesz sprawdzania tożsamości (tak nullby == falsei false == undefined).
Należy również pamiętać, że deletenie „usuwa” odniesień, a jedynie właściwości bezpośrednio na obiekcie, np .:
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)
Jeśli zadeklarowałeś zmienną var, nie możesz jej usunąć:
(function() {
var x = 5;
alert(delete x)
// false
})();
W nosorożcu:
js> var x
js> delete x
false
Nie można również usunąć niektórych predefiniowanych właściwości, takich jak Math.PI:
js> delete Math.PI
false
Istnieją pewne dziwne wyjątki, deletejak w każdym języku, jeśli dbasz wystarczająco, powinieneś przeczytać:
varpoza funkcją) są właściwościami „obiektu globalnego”, jakim jest w przeglądarkach internetowychwindow. Tak więc -var a = 1; delete window.a; console.log(a);z powodzeniem usunie zmienną i spowoduje błąd referencyjny w ostatnim wierszu.