Есть разница, довольно значительная.
Array
конструктор либо принимает одно единственное число, что дает длину массива, а массив с «пустыми» индексами создается, или более правильно длина установлена, но массив на самом деле не содержит ничего
Array(3); // creates [], with a length of 3
при вызове конструктора массива с номером в качестве единственного аргумента, вы создаете массив, который является пустым, и что не может повторяться с обычными методами массива.
Или ... конструктор массива принимает несколько аргументов, в то время как массив создан, где каждый аргумент имеет значение в массиве
Array(1,2,3); // creates an array [1,2,3] etc.
При вызове этой
Array.apply(null, Array(3))
Это немного интереснее.
apply
принимает значение this
в качестве первого аргумента, и, как это не полезно здесь, он установлен в null
Интересная частью является вторым аргументом, где пустой массив передается в.
Как apply
принимает массив, то он был бы как вызов
Array(undefined, undefined, undefined);
и создает массив с тремя индексами, это не пустой, но иметь значение фактически установлен в undefined
, поэтому она ча n повторяться.
TL; DR
Основное отличие заключается в том, что Array(3)
создает массив с тремя индексами, которые пусты. На самом деле, они действительно не существуют, массив имеет длину 3
.
Передача такого массива с пустыми индексами конструктору Array, используя apply
так же, как делает Array(undefined, undefined, undefined);
, который создает массив с тремя undefined
индексами и undefined
в действительности значение, так что это не пустая, как в первом пример.
Методы массива, такие как map()
, могут выполнять итерацию только по фактическим значениям, а не по пустым индексам.
'Array.apply (нуль, Array (9))' * не * 'новый Array (9) '. Он распределяет 'Array (9)' в 'Array()' как девять параметров. Даже если это работает, это в значительной степени неправильный путь. Например, вы можете 'new Array (1e7)', но не 'Array.apply (null, Array (1e7))'. – Sheepy
Связанный: http://stackoverflow.com/questions/22949976/why-does-array-applynull-args-act-inconsistently-when-dealing-with-sparse-a – Sheepy