Книга: 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; // Такой способ работает
- Часть III Установка и удаление программ
- Установка и изменение свойств сценариев
- Удаление из сортирующего дерева
- 11.2. СВОЙСТВА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
- 4. Свойства унарных операций
- 3. Свойства бинарных операций
- Удаление шаблонов узлов STP
- Удаление учебного узла
- Удаление файлов занятий
- Удаление узла
- Добавление, изменение и удаление элементов списка
- Добавление, изменение и удаление столбцов списка