如何解决为什么我不能在 JS 中删除全局变量?
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] 举报,一经查实,本站将立刻删除。