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, ReferenceError
spowoduje 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 null
by == false
i false == undefined
).
Należy również pamiętać, że delete
nie „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, delete
jak w każdym języku, jeśli dbasz wystarczająco, powinieneś przeczytać:
var
poza 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.