3

次のコードが返されることを期待します[1,1,1,1...]

(new Array(10)).map(function() { return 1;})

しかし、それは戻ります[, , , , , ...]

また、 (new Array(10)).length == 10(new Array(10))[0] == undefinedは真です。

そしてz = function(){return 0;};、表現z(undefined) === 0も真実です。

[,,,,,,,,,,].map(function() { return 1; })それでも、も返されることに気付きました[,,,,....]

誰でも理由を説明できますか?

4

3 に答える 3

1

Mozilla Developer Network がArray.prototype.mapについて述べていることは次のとおりです。

コールバックは、値が割り当てられている配列のインデックスに対してのみ呼び出されます。削除されたインデックス、または値が割り当てられていないインデックスに対しては呼び出されません。

を呼び出すnew Array(10)と、Array作成した は 10 要素の長さであると認識しますが、そのインデックスは割り当てられていません。一部のインデックスに値を設定していないリテラル配列を使用するとどうなるかの例を次に示します。

[1, , 3].map(function () {return "a"})

得られる値は次のとおりです。

[ 'a', , 'a' ]

インデックス 1 では、値が割り当てられていないためです。

于 2013-10-28T22:46:28.863 に答える