This page was translated from English by the community.Learn more and join the MDN Web Docs community.
Array.prototype.copyWithin()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since сентябрь 2015 г..
Сводка
МетодcopyWithin() копирует последовательность элементов массива внутри него в позицию, начинающуюся по индексуtarget. Копия берётся по индексам, задаваемым вторым и третьим аргументамиstart иend. Аргументend является необязательным и по умолчанию равен длине массива.
In this article
Синтаксис
arr.copyWithin(target, start[, end = this.length])
Параметры
Описание
Аргументыtarget,start иend приводятся кNumber и обрезаются до целых значений.
Если аргументstart является отрицательным, он трактуется какlength+start гдеlength — это длина массива. Если аргументend является отрицательным, он трактуется какlength+end.
ФункцияcopyWithin намеренно являетсяобобщённой, она не требует, чтобы значениеthis внутри неё было объектомArray, и кроме того, функцияcopyWithin являетсяизменяющим методом, она изменит объектthis и вернёт его, а не просто вернёт копию.
Примеры
[1, 2, 3, 4, 5].copyWithin(0, 3);// [4, 5, 3, 4, 5][1, 2, 3, 4, 5].copyWithin(0, 3, 4);// [4, 2, 3, 4, 5][1, 2, 3, 4, 5].copyWithin(0, -2, -1);// [4, 2, 3, 4, 5][].copyWithin.call({ length: 5, 3: 1 }, 0, 3);// {0: 1, 3: 1, length: 5}// Типизированные массивы ES6 являются подклассами Arrayvar i32a = new Int32Array([1, 2, 3, 4, 5]);i32a.copyWithin(0, 2);// Int32Array [3, 4, 5, 4, 5]// На платформах, которые ещё не совместимы с ES6:[].copyWithin.call(new Int32Array([1, 2, 3, 4, 5]), 0, 3, 4);// Int32Array [4, 2, 3, 4, 5]Полифил
if (!Array.prototype.copyWithin) { Array.prototype.copyWithin = function (target, start /*, end*/) { // Шаги 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-8. var relativeTarget = target >> 0; var to = relativeTarget < 0 ? Math.max(len + relativeTarget, 0) : Math.min(relativeTarget, len); // Шаги 9-11. var relativeStart = start >> 0; var from = relativeStart < 0 ? Math.max(len + relativeStart, 0) : Math.min(relativeStart, len); // Шаги 12-14. var end = arguments[2]; var relativeEnd = end === undefined ? len : end >> 0; var final = relativeEnd < 0 ? Math.max(len + relativeEnd, 0) : Math.min(relativeEnd, len); // Шаг 15. var count = Math.min(final - from, len - to); // Шаги 16-17. var direction = 1; if (from < to && to < from + count) { direction = -1; from += count - 1; to += count - 1; } // Шаг 18 while (count > 0) { if (from in O) { O[to] = O[from]; } else { delete O[to]; } from += direction; to += direction; count--; } // Шаг 19. return O; };}Спецификации
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-array.prototype.copywithin> |