Ответ 1
Конструктор Array можно вызывать двумя способами: список значений, которые будут использоваться как значения для элементов массива, или с одним числовым значением, дающим начальную длину:
var myArray = new Array("hello", "world"); // 2 elements
var otherArray = new Array(100); // 100 elements, all empty
Поскольку существует двусмысленность при передаче только одного номера, этот старый API считается плохо спроектированным. Таким образом, существует Array.of()
, что совпадает с первым параметром для конструктора Array:
var otherArray = Array.of(100); // 1 element
Третий способ сделать массив с выражением инициализации массива:
var otherArray = [100]; // 1 element
Экземпляры массива, созданные каждым из вышеперечисленных, функционально эквивалентны и полностью взаимозаменяемы.
Еще одна вещь: почему существует Array.of()
, учитывая, что мы можем использовать выражение инициализации массива? Ну, Array.of()
- это функция, поэтому ее можно использовать как значение, применяемое в программировании в функциональном стиле. Вы можете (как немного тупой пример) скопировать массив с помощью:
var copy = Array.of.apply(Array, original);
Одной из причин, по которым немой, является то, что там также (в ES2015) Array.from()
сделать то же самое:
var copy = Array.from(original);
Это работает с любым итерационным оригиналом, поэтому это хороший способ превратить arguments
или NodeList в массив.