2012-04-03 14 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' 

フルオブジェクトクロスブラウザーを削除するにはどうすればよいですか?

編集: x = null

+0

どのブラウザでうまく動作しないかについて言及するとよいでしょう... – ThiefMaster

+1

x = nullが機能しないということを意味しますか?あなたがそれにアクセスすることを言及しているならば、xにnullを代入した後、x.yは失敗するでしょう。メモリを再利用することを指している場合は、他の参照がない場合は、xに割り当てられたオブジェクトはガベージコレクションによってクリーンアップされます。 – Matt

答えて

3

暗黙的に宣言された変数は削除演算子で削除できますが、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 

but:

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

機能に関しては、そうではありません。以下の@Spudleyへの私のコメントを見てください。 – Matt

+0

関数がオブジェクトのメンバーである場合、その関数を削除することができます。しかし、グローバルに定義された関数を削除することはできません。 –

+0

グローバルに定義されていることはどういう意味ですか?デフォルトでは、 'window'スコープチェーンの下にグローバル変数が存在します。 Chromeコンソールの 'func1 = function(){}'、 'delete window.func1'を試してみてください。それは正常に削除されます – Matt

2

Javascriptのグローバル名前空間からオブジェクトを削除することはできません。

xのオブジェクトではありますが、xではできません。

+0

Chromeコンソールからは、 'window.func1 = function(){}'、 'delete window.func1'を実行できます。 'func2 = function(){}'の後にも削除を行うことができます。しかし、私は 'function func3(){}'を行うことはできません。 delete onを呼び出すとfalseが返され、関数はそのまま残ります。 – Matt

3

JavaScriptでオブジェクトを削除する必要はありません。オブジェクトへのすべての参照が削除された後、オブジェクトはガベージコレクションされます。参照を削除するには、使用:

x = null; 
1

x = null;またはx = undefined;を試してみてください。

関連する問題