使用 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]
为什么?
答案 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);