Справочник javascript: delete
Описание, примеры
Удаляет объект, свойство объекта или элемент массива по указанному индексу.
Значением expression должна являтся ссылка на удаляемое свойство, например:
delete variableName delete objectExpression.property delete objectExpression["property"] delete array[index]
Если expression не приводится к свойству, оператор delete не делает ничего.
При успешном выполнении оператор delete удаляет свойство из объекта.
При этом delete не меняет прототип объекта, даже если там есть свойство, совпадающее по названию с удаляемым.
Некоторые свойства объектов не могут быть удалены. В спецификации такие свойства обозначены флагом DontDelete.
Можно удалить переменные, объявленные глобально без var, но нельзя - объявленные через var.
Оператор delete возвращает false только если свойство существует, но не может быть удалено, и true - в любых других случаях.
x = 42; // создать свойство глобального объекта window
var y = 43; // объявить как переменную
myobj = new Number()
myobj.h = 4 // создать свойство h
myobj.k = 5 // создать свойство k
delete 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] - его длина останется той же.
При этом элемент исчезнет из массива:
arr = ["a", "b", "c"] delete arr[1] // удалили b alert(arr.length) // 3 alert(arr[1]) // undefined alert(1 in arr) // **false**
Если вы хотите, чтобы элемент остался в массиве, но стал undefined - просто приравняйте его к undefined:
arr[1] = undefined alert(1 in arr) // **true**