2016-05-04 6 views
1

は、私たちが3の配列があるとします。JavaScriptでは[未定義、未定義、未定義]と新しいArray(3)はどのように異なるのですか?

var arr1 = [undefined, undefined, undefined]; 
var arr2 = [, , ,]; 
var arr3 = new Array(3); 

は、それらのすべては、JavaScriptで同じありますか? 固定サイズ配列のデフォルト値としてundefinedを使用したい場合は、それらを互換的に使用できますか?

+0

@Pointyあなたのコメントの前にそれを見ました。愚かな私.. –

+1

@MateiMihaiそれは違いですが、多くの目的のために重要ではありません。本当に私は空の配列に対して '[]'を使うだけです。配列の長さに依存することは、本当に壊れやすいデザインパターンのように思えます。 – Pointy

答えて

5

2番目の2つは同じですが(2番目のブラウザでは一部のブラウザで問題が発生する可能性があります)、最初のブラウザとは異なります。

最初の

var arr1 = [undefined, undefined, undefined]; 

は、配列内の最初の3つのインデックスに明示割り当てを行います。

[undefined, undefined, undefined].reduce(function(c) { return c + 1; }, 0); 
// 3 

[,,].reduce(function(c) { return c + 1; }, 0); 
// 0 

多く:あなたはundefined、インデックス01、および2は代入演算の対象であることは、配列のこれらの要素が.reduce()のような方法で「本物」として扱われることを意味しているという事実を代入しているにもかかわらずArray.prototypeメソッドのうち、初期化されていない配列要素をスキップします。