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