This page was translated from English by the community.Learn more and join the MDN Web Docs community.
Array.prototype.fill()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since сентябрь 2015 г..
Методfill() заполняет все элементы массива от начального до конечного индексов одним значением.
In this article
Интерактивный пример
const array1 = [1, 2, 3, 4];// Fill with 0 from position 2 until position 4console.log(array1.fill(0, 2, 4));// Expected output: Array [1, 2, 0, 0]// Fill with 5 from position 1console.log(array1.fill(5, 1));// Expected output: Array [1, 5, 5, 5]console.log(array1.fill(6));// Expected output: Array [6, 6, 6, 6]Синтаксис
arr.fill(value[, start = 0[, end = this.length]])
Параметры
Возвращаемое значение
Изменённый массив.
Описание
Элементы заполняются в полузакрытом интервале [start,end).
Методfill принимает до трёх аргументов —value,start иend. Аргументыstart иend являются необязательными со значениями по умолчанию, равными0 иlength объектаthis соответственно.
Если аргументstart является отрицательным, он трактуется какlength+start, гдеlength — это длина массива. Если аргументend является отрицательным, он трактуется какlength+end.
Методfill намеренно являетсяобобщённым, он не требует, чтобы значениеthis внутри него было объектомArray.
Методfill являетсяизменяющим методом, он изменит объектthis и вернёт его, а не просто вернёт копию.
Если аргумент value является объектом, то методfill заполнит массив ссылками на этот объект.
Примеры
[1, 2, 3].fill(4); // [4, 4, 4][1, 2, 3].fill(4, 1); // [1, 4, 4][1, 2, 3].fill(4, 1, 2); // [1, 4, 3][1, 2, 3].fill(4, 1, 1); // [1, 2, 3][1, 2, 3].fill(4, 3, 3); // [1, 2, 3][1, 2, 3].fill(4, -3, -2); // [4, 2, 3][1, 2, 3].fill(4, NaN, NaN); // [1, 2, 3][1, 2, 3].fill(4, 3, 5); // [1, 2, 3]Array(3).fill(4); // [4, 4, 4][].fill.call({ length: 3 }, 4); // {0: 4, 1: 4, 2: 4, length: 3}// Объекты заполняются по ссылке.var arr = Array(3).fill({}) // [{}, {}, {}];arr[0].hi = "hi"; // [{ hi: "hi" }, { hi: "hi" }, { hi: "hi" }]Полифил
if (!Array.prototype.fill) { Object.defineProperty(Array.prototype, 'fill', { value: function(value) { // Шаги 1-2. if (this == null) { throw new TypeError('this is null or not defined'); } var O = Object(this); // Шаги 3-5. var len = O.length >>> 0; // Шаги 6-7. var start = arguments[1]; var relativeStart = start >> 0; // Шаг 8. var k = relativeStart < 0 ? Math.max(len + relativeStart, 0) : Math.min(relativeStart, len); // Шаги 9-10. var end = arguments[2]; var relativeEnd = end === undefined ? len : end >> 0; // Шаг 11. var final = relativeEnd < 0 ? Math.max(len + relativeEnd, 0) : Math.min(relativeEnd, len); // Шаг 12. while (k < final) { O[k] = value; k++; } // Шаг 13. return O; } });}Если вам нужно поддерживать действительно устаревшие движки JavaScript, которые не поддерживаютObject.defineProperty, то лучше вообще не использовать полифилы для методов Array.prototype, так как вы не можете сделать их не перечисляемыми.
Спецификации
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-array.prototype.fill> |