В чем разница между Array.of(n), Array (n) и array = [n]?

Как название, мне интересно, какая разница между этими тремя методами инициализации массива.

На самом деле меня больше интересует новый метод Array.of(), предоставленный ES6, почему они чувствуют потребности в реализации этого?

Ответы

Ответ 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 в массив.

На веб-сайте MDN есть документация по Array.of(). Конструктор и форма инициализатора массива уже существуют навсегда, поэтому любая ссылка на JavaScript будет охватывать их (хотя, возможно, без ссылки на Array.of()).

Ответ 2

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]