2012-04-03 86 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;