Конструктор массива 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];   // проще и понятнее

Почему литерал [] лучше?

  1. Читаемо — сразу видно, что это массив.
  2. Быстро — JavaScript обрабатывает его эффективнее.
  3. Без сюрпризов — не путает длину и значения.
  4. Стандарт — так пишут все профессионалы.

❌ Не пишите new Array(5) — вы рискуете создать не то, что думаете.
✅ Пишите [ ] — и если нужно заполнить — используйте .fill().

Пример безопасного создания массива из 5 нулей:

const zeros = Array(5).fill(0); // [0, 0, 0, 0, 0]

Но даже здесь — если вы не уверены, лучше сразу написать:

const zeros = [0, 0, 0, 0, 0];

Проще, понятнее, надёжнее.