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].