微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

使用 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]

为什么?

解决方法

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

window['multiConfig'] = undefined;

原因:

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

,

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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。