Конструктор массива Array
Конструктор new Array() может вести себя неожиданно — и это опасно.
Вот два случая:
Случай 1: несколько аргументов — работает как ожидается
const numbers = new Array(1, 2, 3);
console.log(numbers); // [1, 2, 3]
Здесь всё нормально: передали три числа — получили массив из трёх элементов.
Случай 2: один числовой аргумент — создаёт “пустой” массив нужной длины
const empty = new Array(5);
console.log(empty); // [empty × 5] — не [0, 0, 0, 0, 0]!
console.log(empty[0]); // undefined
Здесь вы не создали массив с пятью нулями. Вы создали массив из пяти пустых ячеек. Это не то же самое, что заполненный нулями массив.
Попробуйте перебрать его:
for (const item of empty) {
console.log(item); // ничего не выведется — все элементы undefined
}
Или попробуйте использовать map:
const doubled = empty.map(x => x * 2);
console.log(doubled); // [empty × 5] — всё ещё пусто
Он не сработает, потому что map пропускает пустые ячейки.
А теперь сравните с литералом:
const numbers = [1, 2, 3]; // ясно, что будет: три числа
const filled = new Array(5).fill(0); // если реально нужны нули — явно заполняем
const simple = [0, 0, 0, 0, 0]; // проще и понятнее
Почему литерал [] лучше?
- Читаемо — сразу видно, что это массив.
- Быстро — JavaScript обрабатывает его эффективнее.
- Без сюрпризов — не путает длину и значения.
- Стандарт — так пишут все профессионалы.
❌ Не пишите
new Array(5)— вы рискуете создать не то, что думаете.
✅ Пишите[ ]— и если нужно заполнить — используйте.fill().
Пример безопасного создания массива из 5 нулей:
const zeros = Array(5).fill(0); // [0, 0, 0, 0, 0]
Но даже здесь — если вы не уверены, лучше сразу написать:
const zeros = [0, 0, 0, 0, 0];
Проще, понятнее, надёжнее.