1. ホーム
  2. javascript

[解決済み] JavaScriptでオブジェクトを削除する

2022-03-27 10:18:46

質問

JavaScriptの delete 演算子を使用します。次のようなコード片を例にとります。

var obj = {
    helloText: "Hello World!"
};

var foo = obj;

delete obj;

このコード片が実行された後 objnull しかし foo と同じようにオブジェクトを参照します。 obj . このオブジェクトは foo を指した。

というのは、私は delete obj はそのオブジェクトを削除し obj が指していたのは、メモリ上の変数だけではありません。 obj .

これは、JavaScriptのガベージコレクタがretain/releaseベースで動作しているため、もし他にオブジェクトを指す変数がなかったら となる はメモリから削除されるのでしょうか?

(ちなみに、私のテストはSafari 4で行いました)。

解決方法は?

delete演算子は参照のみを削除し、オブジェクトそのものを削除することはありません。もしオブジェクト自体を削除してしまうと、C++のdeleteのように、残った他の参照がぶら下がったままになってしまいます。(そして、そのうちのひとつにアクセスするとクラッシュしてしまうのです。それらをすべてnullにすることは、削除時に余分な作業をさせるか、各オブジェクトに余分なメモリを持たせることを意味します)。

Javascriptはガベージコレクションを行うので、オブジェクト自体を削除する必要はありません。

オブジェクトの使用を終えたら、そのオブジェクトへの参照を削除すると便利なことがあります。大きなオブジェクトへの参照が残っていると、たとえプログラムの残りの部分が実際にそのオブジェクトを使用していなくても、回収されなくなる可能性があります。