2012-04-03 88 views
0

我试过了,但delete不起作用。如何用javascript删除完整对象?

var x = {"y":42,"z":{"a":1,"b":[1,2,3]}}; 

alert(x.y); 
delete x; 

alert(x.y); // still shows '42' 

如何删除完整对象crossbrowser?

编辑: x = null也不起作用

+0

在哪个浏览器中它不起作用会是一个好主意... – ThiefMaster 2012-04-03 21:12:29

+1

你是什么意思x = null不起作用?如果你指的是访问它,x.y在将null分配给x之后肯定会失败。如果您指的是回收内存,那么如果没有其他引用,则分配给x的对象将被垃圾回收清除。 – Matt 2012-04-03 21:23:43

回答

3

您只能使用delete操作符来删除隐式声明的变量,但不能使用var声明变量。你可以设置x = null或者x = undefined

3

不能删除变量或函数。只有一个对象的属性。你可以简单地分配:

x = null; 

如果你想清除它的值。

UPDATE:澄清有关职能:

>> function f1() {console.log("aa");} 
>> f1(); 
aa 
>> delete f1; 
false 
>> f1(); 
aa 

但是,如果你声明一个全局函数作为一个窗口属性,可以将其删除:

>> f1 = f1() {console.log("aa");} 
>> delete window.f1; 
true 

这同样适用于变量:

>> a = "x"; 
>> console.log(a); 
x 
>> delete window.a; 
true 
>> console.log(a); 
ReferenceError: a is not defined 

但是:

>> var a = "x"; 
>> console.log(a); 
x 
>> delete a; 
false 
>> console.log(a); 
x 
+0

关于函数,不是true。在下面看到我对@Spudley的评论。 – Matt 2012-04-03 21:20:29

+0

如果函数是对象的成员,则可以删除它。但是你不能删除一个全局定义的函数。 – 2012-04-03 21:40:27

+0

全球定义是什么意思?默认情况下,全局变量存在于“窗口”作用域链下。尝试使用Chrome控制台'func1 = function(){}',然后'delete window.func1'。它将成功删除 – Matt 2012-04-03 22:02:39

2

您无法从Javascript中的全局命名空间中删除对象。

您可以在之内delete对象,但不是x本身。

+0

从Chrome控制台,我可以执行'window.func1 = function(){}',然后'删除window.func1'。我也可以通过'func2 = function(){}'来执行删除操作。但是,我不能'功能func3(){}'。调用delete函数返回false,并且该函数保持不变。 – Matt 2012-04-03 21:16:27

3

您不需要删除JavaScript中的对象。在删除所有对其的引用后,该对象将被垃圾收集。要删除参考,使用方法:

x = null; 
1

尝试x = null;x = undefined;