1. ホーム
  2. ジャバスクリプト

[解決済み】JavaScript の "new Array(n)" と "Array.prototype.map" が変な件

2022-04-04 01:19:46

質問

Firefox-3.5.7/Firebug-1.5.3 と Firefox-3.6.16/Firebug-1.6.2 でこの現象が確認されました。

Firebugを起動すると。

var x = new Array(3)
console.log(x) 
// [undefined, undefined, undefined]

var y = [undefined, undefined, undefined]
console.log(y) 
// [undefined, undefined, undefined]

console.log( x.constructor == y.constructor) // true

console.log( 
  x.map(function() { return 0; })
)
// [undefined, undefined, undefined]

console.log(
  y.map(function() { return 0; })
)
// [0, 0, 0]

どうなってるんだ? これはバグなのでしょうか、それとも私の誤解なのでしょうか? new Array(3) ?

解決方法は?

どうやら最初の例では

x = new Array(3);

長さ3の配列を作成しますが、要素がないので、インデックス[0], [1], [2]は作成されません。

この場合、インデックスやプロパティ自体は作成されますが、それらが参照するオブジェクトは未定義です。

y = [undefined, undefined, undefined]
// The following is not equivalent to the above, it's the same as new Array(3)
y = [,,,];

mapはセットの長さではなく、インデックス/プロパティのリストで実行されるので、インデックス/プロパティが作成されていない場合は、実行されません。