Javascript删除运算符

时间:2014-08-13 17:33:36

标签: javascript memory-management properties

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

var o = {x:1 , y:2 };
delete o ; // Can't delete a declared variable so returns false;

但是,本书还指出,在任何函数范围之外声明的变量都是全局对象的属性。

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

3 个答案:

答案 0 :(得分:3)

说:

var o = {x:1 , y:2 };

在顶级作用域中,您声明了一个无法删除的全局变量。它确实在全局对象上创建了一个属性(它在浏览器中为window对象别名),但它确实是一个特殊的属性。但是,如果您声明如下:

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

然后,您将隐式地在全局范围(请记住window对象)上设置属性。两者相似,但足够不同。 delete运算符从对象中删除隐式属性,但不会删除在全局对象上创建的变量。

编辑,找到更全面的答案

https://stackoverflow.com/a/4862268/1443478

答案 1 :(得分:1)

由于O已经声明并且具有属性,因此无法在对象上使用delete。你可以使用

var o = {x:1 , y:2 };
delete o.x ; 

并删除此处的属性为DEMO

答案 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

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