SyntaxError: 对非限定名称应用“delete”运算符已弃用

当尝试使用 delete 运算符删除变量时,会发生 JavaScript 严格模式 唯一的异常“对非限定名称应用 '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)

错误类型

哪里出错了?

JavaScript 中的普通变量不能使用 delete 运算符删除。在严格模式下,尝试删除变量将抛出错误,并且不允许。

delete 运算符只能删除对象上的属性。如果对象属性是可配置的,则它们是“限定的”。

与普遍看法相反,delete 运算符与直接释放内存**无关**。内存管理是通过间接打破引用来完成的,有关更多详细信息,请参阅 内存管理 页面和 delete 运算符页面。

此错误仅在 严格模式代码 中发生。在非严格模式代码中,该操作仅返回 false

示例

释放变量的内容

尝试删除普通变量会在严格模式下抛出错误

js
"use strict";

var x;

// …

delete x;

// SyntaxError: applying the 'delete' operator to an unqualified name
// is deprecated

要释放变量的内容,您可以将其设置为 null

js
"use strict";

var x;

// …

x = null;

// x can be garbage collected

另请参阅