Если вы неявно объявляете переменную без 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
})();
В Rhino:
js> var x
js> delete x
false
Вы также не можете удалить некоторые предопределенные свойства, такие как Math.PI
:
js> delete Math.PI
false
В delete
, как и в любом другом языке, есть некоторые странные исключения, если вы достаточно внимательны, вам следует прочитать:
person
meder omuraliev
schedule
20.10.2009