Если вы неявно объявляете переменную без var
, правильным способом будет использование delete foo
.
Однако после его удаления, если вы попытаетесь использовать это в такой операции, как добавление, ReferenceError
будет брошено, потому что вы не можете добавить строку в необъявленный, неопределенный идентификатор. Пример:
x = 5;
delete x
alert('foo' + x )
// ReferenceError: x is not defined
В некоторых ситуациях может быть безопаснее присвоить ему значение false, null или undefined, чтобы оно было объявлено и не выдавало этот тип ошибки.
foo = false
Обратите внимание , что в ECMAScript null
, false
, undefined
, 0
, NaN
, или ''
бы все вычисляться false
. Просто убедитесь, что вы не используете !==
оператор, а вместо этого !=
при проверке типа для логических значений, и вы не хотите, чтобы проверка идентичности (так null
будет == false
и false == undefined
).
Также обратите внимание, что delete
ссылки не «удаляются», а только свойства непосредственно на объекте, например:
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)
Если вы объявили переменную, var
вы не можете ее удалить:
(function() {
var x = 5;
alert(delete x)
// false
})();
В носороге:
js> var x
js> delete x
false
Также вы не можете удалить некоторые предопределенные свойства, такие как Math.PI
:
js> delete Math.PI
false
Есть некоторые странные исключения, delete
как и в случае с любым другим языком, если вы достаточно внимательны, вы должны прочитать:
var
вне функции), являются свойствами "глобального объекта", который есть в веб-браузерахwindow
. Так что -var a = 1; delete window.a; console.log(a);
удалит переменную и заставит последнюю строку выдать ошибку ссылки.