Книга: JavaScript. Подробное руководство, 6-е издание

6.3. Удаление свойств

6.3. Удаление свойств

Оператор delete (раздел 4.13.3) удаляет свойство из объекта. Его единственный операнд должен быть выражением обращения к свойству. Может показаться удивительным, но оператор delete не оказывает влияния на значение свойства - он оперирует самим свойством:

delete book.author; // Теперь объект book не имеет свойства author,
delete book["main title"]; // Теперь он не имеет свойства "main title".

Оператор delete удаляет только собственные свойства и не удаляет унаследованные. (Чтобы удалить унаследованное свойство, необходимо удалять его в объекте-прототипе, в котором оно определено. Такая операция затронет все объекты, наследующие этот прототип.)

Выражение delete возвращает значение true в случае успешного удаления свойства или когда операция удаления не привела к изменению объекта (например, при попытке удалить несуществующее свойство). Выражение delete также возвращает true, когда этому оператору передается выражение, не являющееся выражением обращения к свойству:

о = {х:1}; //о имеет собственное свойство х и наследует toString
delete о.х; // Удалит х и вернет true
delete о.х; // Ничего не сделает (х не существует) и вернет true
delete о.toString; // Ничего не сделает (toString не собственное свойство) и вернет true
delete 1; // Бессмысленно, но вернет true

Оператор delete не удаляет ненастраиваемые свойства, атрибут configurable которых имеет значение false. (Однако он может удалять настраиваемые свойства нерасширяемых объектов.) Ненастраиваемыми являются свойства встроенных объектов, а также свойства глобального объекта, созданные с помощью инструкций объявления переменных и функций. Попытка удалить ненастраиваемое свойство в строгом режиме вызывает исключение Type Error. В нестрогом режиме (и в реализациях ECMAScript 3) в таких случаях оператор delete просто возвращает false:

delete Object.prototype; // Удаление невозможно - ненастраиваемое свойство
var х = 1; // Объявление глобальной переменной
delete this.x; // Это свойство нельзя удалить
function f() {} // Объявление глобальной функции
delete this.f; // Это свойство также нельзя удалить

При удалении настраиваемых свойств глобального объекта в нестрогом режиме допускается опускать ссылку на глобальный объект и передавать оператору delete только имя свойства:

this.x =1; // Создать настраиваемое глобальное свойство (без var)
delete х; // И удалить его

Однако в строгом режиме оператор delete возбуждает исключение SyntaxError, если его операндом является неквалифицированный идентификатор, такой как х, поэтому необходимо указывать явное выражение обращения к свойству:

delete х; // В строгом режиме возбудит исключение SyntaxError
delete this.x; // Такой способ работает

Оглавление книги


Генерация: 0.666. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз