Якщо ви неявно оголошуєте змінну без var
, правильним способом було б користуватися delete foo
.
Однак після видалення його, якщо ви спробуєте використовувати це в такій операції, як додавання a, 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);
вдало видалить змінну і призведе до того, що останній рядок видасть помилку посилання.