Сводка
Метод 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».