SyntaxError: applying the 'delete' operator to an unqualified name is deprecated
Исключение "applying the 'delete' operator to an unqualified name is deprecated" возникает только в строгом режиме при попытке удалить переменную с помощью оператора delete
.
Сообщение
SyntaxError: Delete of an unqualified identifier in strict mode. (V8-based) SyntaxError: applying the 'delete' operator to an unqualified name is deprecated (Firefox) SyntaxError: Cannot delete unqualified property 'a' in strict mode. (Safari)
Тип ошибки
SyntaxError
только в строгом режиме.
Что не так?
Обычные переменные в JavaScript нельзя удалить с помощью оператора delete
. В строгом режиме попытка удалить переменную вызовет ошибку и не будет разрешена.
Оператор delete
может удалять только свойства объекта. Свойства объекта "квалифицированы", если они конфигурируемы.
В отличие от общепринятого мнения, оператор delete
не имеет ничего общего с непосредственным освобождением памяти. Управление памятью осуществляется косвенным образом через удаление ссылок, читайте подробнее в разделе про управление памятью, а также на странице оператора delete
.
Эта ошибка возникает только в строгом режиме. В нестрогом режиме операция просто возвращает false
.
Примеры
Попытка удалить простую переменную не работает в JavaScript и выдаёт ошибку в строгом режиме:
"use strict";
var x;
// ...
delete x;
// SyntaxError: применение оператора 'delete' к неполному имени является устаревшим
Чтобы освободить содержимое переменной, задайте для неё значение
:null
"use strict";
var x;
// ...
x = null;
// X может быть собран "мусор"