为什么我不能在 JS 中删除全局变量?

时间:2021-06-10 09:03:46

标签: javascript

使用 Chrome 我在控制台中传递了这个全局变量的名称:

multiConfig

得到结果:

multi: {type: "1", containerId: "mp", go: {…}}
__proto__: Object

我尝试通过单击删除此变量:

if (window['multiConfig']) {
    delete window['multiConfig'];
}

我收到此错误:

ERROR TypeError: Cannot delete property 'multiConfig' of [object Window]

为什么?

2 个答案:

答案 0 :(得分:5)

您不能删除 window 变量,但可以取消设置:

window['multiConfig'] = undefined;

原因:

window 对象不可配置。
你可以参考这个 - How to unset a JavaScript variable?

答案 1 :(得分:1)

var 声明的变量作为属性添加到全局 window 对象上,不能用 delete 运算符删除。

来自MDN - var

<块引用>

在全局上下文中,使用 var 声明的变量被添加为 全局对象的不可配置属性。这意味着其 属性描述符不能更改,也不能使用删除 删除。

还解释了原因:

<块引用>

在全局对象上为全局变量创建的属性被设置 不可配置,因为标识符将被视为 变量,而不是全局对象的简单属性。 JavaScript 有自动内存管理,没有意义 能够对全局变量使用删除运算符。

另请注意,尝试为使用 window 声明的变量删除全局 var 对象上的属性集在非严格模式下静默失败,并在严格模式下抛出 TypeError

另请注意,如果明确设置,您可以从 window 对象中删除属性。

var a = 1;      // can't be deleted
window.b = 2;   // can be deleted

delete window.a;
delete window.b;

console.log(window.a);
console.log(window.b);

相关问题