我读了一本关于javascript的书,说:
var o = {x:1 , y:2 };
delete o ; // Can't delete a declared variable so returns false;
但是,本书还指出,在任何函数范围之外声明的变量都是全局对象的属性。
如果它是全局对象的属性,为什么我们不允许删除它呢?
答案 0 :(得分:3)
说:
var o = {x:1 , y:2 };
在顶级作用域中,您声明了一个无法删除的全局变量。它确实在全局对象上创建了一个属性(它在浏览器中为window
对象别名),但它确实是一个特殊的属性。但是,如果您声明如下:
o = {x:1 , y:2 };
然后,您将隐式地在全局范围(请记住window
对象)上设置属性。两者相似,但足够不同。 delete
运算符从对象中删除隐式属性,但不会删除在全局对象上创建的变量。
编辑,找到更全面的答案
答案 1 :(得分:1)
答案 2 :(得分:-1)
首先你必须知道删除operator.let的工作是什么。解释---
"The delete operator removes a property from an object".here i say it removes an object property not a variable.
in your code you declare a variable.not an object so delete does not work.i think you understand.
o = {x:1 , y:2 };
delete o ;
但我认为上面的代码是正确的。为什么? 因为这里o是全局对象的属性,它也是一个对象,所以它可以正常工作。可以帮助你的链接是delete operator
这是我的第一个答案。对编码感到满意。