Сводка
Метод fill() заполняет все элементы массива от начального до конечного индексов одним значением.
Синтаксис
arr.fill(value[, start = 0[, end = this.length]])
Параметры
value- Значение, заполняющее массив.
start- Необязательный параметр. Начальный индекс.
end- Необязательный параметр. Конечный индекс.
Описание
Элементы заполняются в полузакрытом интервале [start, end).
Метод fill принимает до трёх аргументов — value, start и end. Аргументы start и end являются необязательными со значениями по умолчанию, равными 0 и length объекта this соответственно.
Если аргумент start является отрицательным, он трактуется как length+start, где length — это длина массива. Если аргумент end является отрицательным, он трактуется как length+end.
Метод fill намеренно является обобщённым, он не требует, чтобы значение this внутри него было объектом Array.
Метод fill является изменяющим методом, он изменит объект this и вернёт его, а не просто вернёт копию.
Примеры
[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, -2) // [4, 2, 3]
[1, 2, 3].fill(4, NaN, NaN) // [1, 2, 3]
[].fill.call({ length: 3 }, 4) // {0: 4, 1: 4, 2: 4, length: 3}
Полифилл
if (!Array.prototype.fill) {
Array.prototype.fill = 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;
};
}
Спецификации
| Спецификация | Статус | Комментарии |
|---|---|---|
| ECMAScript 2015 (6th Edition, ECMA-262) Определение 'Array.prototype.fill' в этой спецификации. |
Стандарт | Изначальное определение. |
| ECMAScript 2017 Draft (ECMA-262) Определение 'Array.prototype.fill' в этой спецификации. |
Черновик |
Совместимость с браузерами
| Возможность | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|
| Базовая поддержка | 45 [1] | 31 (31) | Нет | Нет | 7.1 |
| Возможность | Android | Chrome для Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
| Базовая поддержка | Нет | Нет | 31.0 (31) | Нет | Нет | iOS 8 |
[1] Начиная с версии 36, возможность доступна к включению через настройки. По адресу chrome://flags активируйте запись «Включить экспериментальный JavaScript».