Если expression не приводится к свойству, оператор delete не делает ничего.
При успешном выполнении оператор delete удаляет свойство из объекта.
При этом delete не меняет прототип объекта, даже если там есть свойство, совпадающее по названию с удаляемым.
Некоторые свойства объектов не могут быть удалены. В спецификации такие свойства обозначены флагом DontDelete.
Можно удалить переменные, объявленные глобально без var, но нельзя - объявленные через var.
Оператор delete возвращает false только если свойство существует, но не может быть удалено, и true - в любых других случаях.
Пример:
Выделить все
x = 42; // создать свойство глобального объекта windowvar y = 43; // объявить как переменную
myobj = new Number()
myobj.h = 4// создать свойство h
myobj.k = 5// создать свойство kdelete x // возвратит true (объявлено без var)delete y // возвратит false (объявлено с var, флаг DontDelete)delete Math.PI// возвратит false (встроенный объект, флаг DontDelete)delete myobj.h// возвратит true (пользовательское свойство)with(myobj){delete k; // возвратит true (эквивалент delete myobj.k)}delete myobj // возвратит true (аналог delete x)
Вы не можете удалить свойство из объекта, которое он унаследовал от прототипа (хотя вы можете удалить его напрямую из прототипа).
Пример:
Выделить все
function Foo(){}
Foo.prototype.bar = 42;
var foo = new Foo();
delete foo.bar; // ничего не сделаетalert(foo.bar); // введет 42, свойство унаследованоdelete Foo.prototype.bar; // удалит из прототипаalert(foo.bar); // выведет "undefined", свойства больше нет
При удалении элементов массива, его длина не меняется. Даже если вы удалите последний элемент: delete a[a.length-1] - его длина останется той же.