2013-03-03 2 views
7

Hereを述べたように、JavaScriptで既存のアレイを(と新しいものを割り当てない)空にするための最も効率的な方法を使用するようです:javascriptで普通のオブジェクトを空にする最も効率的な方法は何ですか?

array.length = 0; 

は、プレーンオブジェクトに対して同じ操作の仕事をしていますか? (別名「連想配列」または「辞書」) もしそうでなければ、最も効率的な手段は何ですか既存のjavascriptオブジェクトですか?

私はガベージコレクタにいくつかの余分な作業をプッシュし、ヒープにいくつかの新しいメモリを割り当てますので、新しいものを割り当てることが最良の選択肢ではないと思います。

少なくともChromeとFirefoxで動作するソリューションが必要です。

+0

連想配列(http://jsfiddle.net/7XVym/)では.length = 0のようには見えません。 – awbergs

+3

JSには連想配列はありません。あなたはオブジェクトを意味しますか? –

+0

'array = null;'を単に行うことはできませんか? – insertusernamehere

答えて

22

これを行う最短の方法は、新しいオブジェクトを作成することです。とにかく、すべてのプロパティを収集するガベージになります。

var foo = { 
    a: 5, 
    b: 4 
}; 
foo = {}; 

ます。また、プロパティを反復処理し、それらを個別に削除することもできます:それは、JavaScriptがオブジェクト性質を持っていること、また、言い回しの問題として、指摘する価値はありません

for (var prop in foo) { 
    if (foo.hasOwnProperty(prop)) { 
     delete foo[prop]; 
    } 
} 

を連想配列。

+3

'foo = {}'は新しいオブジェクトを作成し、**は元のオブジェクトを**のままにします。 'var foo = {a:5、b:4};とすると、元のオブジェクトへの他の参照があるときに違いがあります。 var bar = foo; foo = {}; ' 最後に、' bar'は期待通りに '{a:5、b4}'と** '** {{}'ではありません。 – Ignitor

関連する問題