Метод fill() заполняет все элементы массива от начального до конечного индексов одним значением.
Источник этого интерактивного примера хранится в репозитории GitHub. Если вы хотите внести свой вклад в проект интерактивных примеров, скопируйте https://github.com/mdn/interactive-examples и отправьте нам запрос на перенос.
Синтаксис
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 и вернёт его, а не просто вернёт копию.
Если аргумент value является объектом, тo метод 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, 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, так как вы не можете сделать их не перечисляемыми.
Спецификации
| Спецификация | Статус | Комментарии |
|---|---|---|
| ECMAScript 2015 (6th Edition, ECMA-262) Определение 'Array.prototype.fill' в этой спецификации. |
Стандарт | Изначальное определение. |
| ECMAScript (ECMA-262) Определение 'Array.prototype.fill' в этой спецификации. |
Живой стандарт |
Совместимость с браузерами
| Компьютеры | Мобильные | Server | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
fill | Chrome Полная поддержка 45 | Edge Полная поддержка 12 | Firefox Полная поддержка 31 | IE Нет поддержки Нет | Opera Полная поддержка 32 | Safari Полная поддержка 8 | WebView Android Полная поддержка 45 | Chrome Android Полная поддержка 45 | Firefox Android Полная поддержка 31 | Opera Android Полная поддержка 32 | Safari iOS Полная поддержка 8 | Samsung Internet Android Полная поддержка 5.0 | nodejs
Полная поддержка
4.0.0
|
Легенда
- Полная поддержка
- Полная поддержка
- Нет поддержки
- Нет поддержки
- Пользователь должен сам включить эту возможность.
- Пользователь должен сам включить эту возможность.