Javascript删除运算符
我读过一本关于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 ; 删除属性这里是一
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.