Вебсправочник
Справочник JavaScript

Array.fill(): заполнение массива и общая ссылка на объект

Fill заменяет элементы массива одним значением и возвращает тот же массив. Метод удобен для простых начальных значений, но повтор объекта создаёт несколько ссылок на один объект.

Назначение

Fill заменяет элементы массива одним значением и возвращает тот же массив. Метод удобен для простых начальных значений, но повтор объекта создаёт несколько ссылок на один объект.

Как это работает

Можно ограничить заполнение индексами start и end, причём end не входит в диапазон. Длина массива не увеличивается. Переданный объект не клонируется отдельно для каждой позиции.

Пример

const values = [1, 2, 3, 4];
console.assert(values.fill(0, 1, 3) === values);
console.assert(values.join(",") === "1,0,0,4");
const shared = Array(2).fill({done: false});
shared[0].done = true;
console.assert(shared[1].done === true);
const separate = Array.from({length: 2}, () => ({done: false}));
separate[0].done = true;
console.assert(separate[1].done === false);
console.log(values);

Что должно получиться

Числовой массив меняется только в выбранном диапазоне. Во втором опыте изменение одного элемента видно через другую позицию. Третий вариант создаёт отдельный объект на каждой итерации.

Граница применения и частая ошибка

Для матрицы Array(rows).fill(Array(cols).fill(0)) обычно создаёт нежелательные общие строки. Не воспринимайте fill как копирование структуры. Если нужно сохранить исходный массив, сначала выберите подходящую стратегию копии.

Самостоятельная проверка

Создайте массив из трёх независимых списков и добавьте элемент только в первый. Проверьте остальные списки. Затем сравните заполнение примитивом и объектом, объяснив разницу через ссылки.

Пример JavaScript проверяйте в собственном учебном файле или консоли своего проекта. Встроенная песочница справочника JavaScript не выполняет. Успешное выполнение в одной среде не гарантирует поддержку метода во всех браузерах.

Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.