Как название, мне интересно, какая разница между этими тремя методами инициализации массива.
На самом деле меня больше интересует новый метод Array.of(), предоставленный ES6, почему они чувствуют потребности в реализации этого?
Как название, мне интересно, какая разница между этими тремя методами инициализации массива.
На самом деле меня больше интересует новый метод Array.of(), предоставленный ES6, почему они чувствуют потребности в реализации этого?
Конструктор 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 в массив.
Array.of(2)
создаст массив с элементом 2.
var temp = Array.of(2); // temp = [2]
Array(2)
создаст массив из 2 элементов.
var temp = new Array(2); // temp = [undefined, undefined]
temp = [2]
создаст массив с элементом 2.
var temp = [2]; // temp = [2]