delete

Синтаксис

delete expression

Аргументы

expression
выражение, приводимое к ссылке на удаляемый объект

Описание, примеры

Удаляет объект, свойство объекта или элемент массива по указанному индексу.

Значением 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

См. также