質問: 2; // 以下のようになる。 console.log(array1); // [0, empty, 2] console.log(Object.keys(array1)) // => [0, 2] console.log(array1.map(()=>3)); // [3, empty, 3] ```
回答: > > array1 と array2 は同じものに見えますが map を適用すると結果が異なる理由がわからず苦慮しております。 > > > `array2`の方は、`Array.apply`となっていますが、`.apply`には**`length`を見て添字の値をコピーする**機能がありますので、その過程で`Array(undefined, undefined, undefined)`と呼んだのと同じ扱いになって、本当に`undefined`が3つはいった配列が出来上がります。 両者の違いは`Object.keys`ではっきりします。 ``` console.log(Object.keys(array1)) // => [] console.log(Object.keys(array2)) // => [0, 1, 2] ``` (なお、`Array`に関しては`new`ありでもなしでも動作は変わりません)