たとえば、次のようなプロパティとして別のオブジェクトを含むオブジェクトがあるとします。
var obj = {
'1': {...},
'42': {...}
};
obj
スコープから外れると、ネストされたすべてのオブジェクトが暗黙的に破棄されますか、それともそれらを明示的に反復する必要がありますdelete
か?
たとえば、次のようなプロパティとして別のオブジェクトを含むオブジェクトがあるとします。
var obj = {
'1': {...},
'42': {...}
};
obj
スコープから外れると、ネストされたすべてのオブジェクトが暗黙的に破棄されますか、それともそれらを明示的に反復する必要がありますdelete
か?
はい、別の参照がまだ存在しない限り:
var obj = {
'1': {...},
'42': {...}
};
var save = obj['1'];
obj = null;
ガベージコレクションの後、他の参照が作成されていないと仮定すると、objおよびobj ['42']のスペースが回復され、保存された値はもちろん保持されます。
Mea culpa:delete obj
私のオリジナルのコメントに記載されているように、obj
として宣言されているため無効ですvar
。グローバルobj
であり、したがってグローバルオブジェクトのプロパティであった場合は、delete
正常に機能していました。変数を効果的に削除するには、を使用しますobj = null
。これをテストすることで私が学んだことの1つは、演算子とがまたはdelete
を返すことでした。true
false