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

4.13.3. Оператор delete

4.13.3. Оператор delete

Унарный оператор delete выполняет попытку удалить свойство объекта или элемент массива, определяемый операндом.[3] Подобно операторам присваивания, инкремента и декремента, оператор delete обычно используется ради побочного эффекта, выражающегося в удалении свойства, а не ради возвращаемого значения. Ниже приводятся несколько примеров его использования:

var о = {х: 1, у: 2}; // Определить объект
delete о.х;           // Удалить одно из его свойств
"х" in о              // => false: свойство больше не существует
var а = [1,2,3]:      // Создать массив
delete а[2];          // Удалить последний элемент массива
2 in а                // => false: второй элемент больше не существует
a.length              // => 3: обратите внимание, что длина массива при этом не изменилась

Внимание: удаленное свойство или элемент массива не просто получает значениеundefined. После удаления свойства оно прекращает свое существование. Попытка прочитать значение несуществующего свойства возвратит значение undefined, но вы можете проверить фактическое наличие свойства с помощью оператора in (раздел 4.9.3). Операция удаления элемента массива оставляет в массиве «дырку» и не изменяет длину массива. В результате получается разреженный массив.

Оператор delete требует, чтобы его операнд был левосторонним выражением. Если операнд не является левосторонним выражением, оператор не будет выполнять никаких действий и вернет значение true. В противном случае delete попытается удалить указанное левостороннее выражение. В случае успешного удаления значения левостороннего выражения оператор delete вернет значение true. Не все свойства могут быть удалены: некоторые встроенные свойства из базового и клиентского языков JavaScript устойчивы к операции удаления. Точно так же не могут быть удалены пользовательские переменные, объявленные с помощью инструкции var. Кроме того, невозможно удалить функции, объявленные с помощью инструкции function, а также объявленные параметры функций.

В строгом режиме, определяемом стандартом ECMAScript 5, оператор delete возбуждает исключение SyntaxError, если его операндом является неквалифицированный идентификатор, такой как имя переменной, функции или параметра функции: он может оперировать только операндами, которые являются выражениями обращения к свойству (раздел 4.4). Кроме того, строгий режим определяет, что оператор delete должен возбуждать исключение ТуреЕггог, если запрошено удаление ненастраиваемого свойства (раздел 6.7). В обычном режиме в таких случаях исключение не возбуждается, и оператор delete просто возвращаетfalse, чтобы показать, что операнд не был удален.

Ниже приводится несколько примеров использования оператора delete:

var о = {х:1, у:2}; // Определить переменную; инициализировать ее объектом
delete о.х;         // Удалить одно из свойств объекта; вернет true
typeof о.х;         // Свойство не существует; вернет "undefined"
delete о.х;         // Удалить несуществующее свойство; вернет true
delete о;           // Объявленную переменную удалить нельзя; вернет false
                    // В строгом режиме возбудит исключение.
delete 1;    // Аргумент не является левосторонним выражением; вернет true
this.x =1;   // Определить свойство глобального объекта без var
delete х;    // Удалить: вернет true при выполнении в нестрогом режиме; в строгом
             // режиме возбудит исключение. Используйте 'delete this.x' взамен,
х;           // Ошибка времени выполнения: переменная х не определена

С оператором delete мы снова встретимся в разделе 6.3.

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


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