Массивы разные.Разница в том, что new Array(3)
создает массив длиной три, но без свойств, в то время как [undefined, undefined, undefined]
создает массив длиной три и три свойства с именами "0", "1" и "2", каждый из которых имеетзначение undefined
.Вы можете увидеть разницу, используя оператор in
:
"0" in new Array(3); // false
"0" in [undefined, undefined, undefined]; // true
Это связано с немного запутанным фактом, что если вы пытаетесь получить значение несуществующего свойства любого нативного объекта в JavaScript,возвращает undefined
(вместо того, чтобы выдавать ошибку, как это происходит, когда вы пытаетесь сослаться на несуществующую переменную), что совпадает с тем, что вы получаете, если ранее для свойства было явно установлено значение undefined
.