Javascript删除运算符

Javascript删除运算符,javascript,memory-management,properties,Javascript,Memory Management,Properties,我读过一本关于javascript的书,书中说: var o = {x:1 , y:2 }; delete o ; // Can't delete a declared variable so returns false; 然而,这本书还指出,在任何函数范围之外声明的变量都是全局对象的属性 如果它是全局对象的属性,为什么不允许删除它呢?因为O已经声明,并且具有不能在对象上使用delete的属性。你可以用 var o = {x:1 , y:2 }; delete o.x ; 删除属性这里是一

我读过一本关于javascript的书,书中说:

var o = {x:1 , y:2 };
delete o ; // Can't delete a declared variable so returns false;
然而,这本书还指出,在任何函数范围之外声明的变量都是全局对象的属性


如果它是全局对象的属性,为什么不允许删除它呢?

因为O已经声明,并且具有不能在对象上使用delete的属性。你可以用

var o = {x:1 , y:2 };
delete o.x ; 
删除属性这里是一个相同的例子。

说:

varo={x:1,y:2}

在顶级范围中,您正在声明一个无法删除的全局变量。它确实在全局对象上创建了一个属性(它在浏览器中被别名为
窗口
对象),但它确实是一个特殊的属性。但是,如果您做出如下声明:

o={x:1,y:2}

然后隐式地在全局范围(记住,
窗口
对象)上设置一个属性。这两者很相似,但差异很大。
delete
操作符从对象中删除隐式属性,但不会删除在全局对象上创建的变量

编辑,找到更全面的答案


首先,您必须知道delete操作符的工作是什么。让我解释一下---

o={x:1,y:2};
删除o;

但我认为上面的代码是正确的。为什么? 因为这里o是全局对象的一个属性,也是一个对象,所以它可以正常工作


这是我的第一个答案。对编码感到满意。

不要使用
var
关键字
o={a:true};删除o;console.log(window.o)//未定义
downvote由我的评论解释。我可以删除它。在我对问题的评论中的jsbin中,我可以看到它。也许我错了。如果你能说得更清楚一点,我会投赞成票。你从来没有初始化过它,而且没有变量。问题是有变量的。因此,我试图用它来解释它。我不理解你最后的评论。我想在这里通过
o={x:1,y:2}
我们正在设置window对象的属性(因此我们可以将其称为
window.o
),这是相同的,但在
删除
定义方面听起来更清晰。
"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.