Learn JavaScript

Array() - функция для создания массивов в JavaScript

Array() создаёт новый массив.

Это встроенная функция JavaScript, но на практике её используют осторожно, потому что у неё есть особое поведение с одним числовым аргументом.

Синтаксис

Array()
Array(length)
Array(element0, element1, ...)

Её также можно вызвать через new:

new Array()
new Array(length)
new Array(element0, element1, ...)

В результате в обоих случаях создаётся массив.

Как работает Array()

Без аргументов создаётся пустой массив:

console.log(Array());      // []
console.log(new Array());  // []

С несколькими аргументами создаётся массив из этих значений:

console.log(Array(1, 2, 3));     // [1, 2, 3]
console.log(new Array("a", "b")); // ["a", "b"]

Особый случай: один числовой аргумент

Если передать одно число, Array() создаст массив такой длины, а не массив с этим числом внутри.

const arr = Array(3);

console.log(arr);        // [ <3 empty items> ]
console.log(arr.length); // 3

Это одна из самых частых причин путаницы.

Array(3) и [3] - не одно и то же

console.log(Array(3)); // массив длины 3
console.log([3]);      // массив с одним элементом 3

Во втором случае внутри реально хранится число 3.

console.log([3].length); // 1
console.log([3][0]);     // 3

Если передать один нечисловой аргумент

Если аргумент один, но это не число, он станет обычным элементом массива.

console.log(Array("hello")); // ["hello"]
console.log(Array(true));    // [true]

Особое поведение работает именно для одного числового аргумента.

Empty slots

Array(3) создаёт не три значения undefined, а три пустых слота.

const arr = Array(3);

console.log(arr.length); // 3
console.log(arr[0]);     // undefined

На вид это похоже на массив с undefined, но поведение у таких массивов может отличаться в некоторых методах.

Когда это полезно

Array() может пригодиться, когда:

  • нужно создать массив заданной длины
  • вы читаете чужой код, где уже используется этот стиль
  • нужно быстро создать заготовку под будущие значения

Пример:

const arr = Array(5);

console.log(arr.length); // 5

Но на практике для обычного создания массива чаще используют литерал [].

Почему часто предпочитают []

Для обычных массивов запись через [] проще и понятнее.

const arr = [1, 2, 3];

Она не имеет специального поведения с одним числом и обычно читается лучше, чем Array(...).

Array() и Array.of()

Если нужен массив с одним числом внутри, Array.of() ведёт себя предсказуемо:

console.log(Array(3));    // массив длины 3
console.log(Array.of(3)); // [3]

Поэтому в спорных местах Array.of() может быть понятнее.

Array() и new Array()

В реальном результате разницы почти нет:

console.log(Array(1, 2, 3));     // [1, 2, 3]
console.log(new Array(1, 2, 3)); // [1, 2, 3]

Обычно new Array() используют реже, потому что без new запись короче.

Частые ошибки

Ожидать, что Array(3) создаст [3]

console.log(Array(3)); // не [3]

Если нужен именно массив с числом внутри, лучше написать:

console.log([3]);        // [3]
console.log(Array.of(3)); // [3]

Путать empty slots и undefined

const arr = Array(3);

console.log(arr[0]); // undefined

Но это не совсем то же самое, что:

const arr = [undefined, undefined, undefined];

Использовать Array() там, где яснее []

const arr = Array(1, 2, 3);

Во многих случаях понятнее и привычнее так:

const arr = [1, 2, 3];

Быстрая памятка

  • Array() создаёт новый массив
  • без аргументов получится []
  • с несколькими аргументами получится массив из этих значений
  • с одним числом создаётся массив заданной длины
  • для обычного создания массива чаще используют []

Коротко

Array() - это встроенная функция JavaScript для создания массивов. Её важно помнить из-за особого поведения с одним числовым аргументом: Array(3) создаёт массив длины 3, а не массив [3].