Get to know MDN better
This page was translated from English by the community. Learn more and join the MDN Web Docs community.
This feature is well established and works across many devices and browser versions. It’s been available across browsers since октябрь 2015 г..
Spread syntax позволяет расширить доступные для итерации элементы (например, массивы или строки) в местах
Для вызовов функций:
myFunction(...iterableObj);Для литералов массива или строк:
[...iterableObj, '4', 'five', 6];Для литералов объекта (новое в ECMAScript 2018):
let objClone = { ...obj };Обычно используют Function.prototype.apply в случаях, когда хотят использовать элементы массива в качестве аргументов функции.
С spread syntax вышеприведённое можно записать как:
Любой аргумент в списке аргументов может использовать spread syntax, и его можно использовать несколько раз.
Вызывая конструктор через ключевое слово new, невозможно использовать массив и apply напрямую (apply выполняет [[Call]], а не [[Construct]]).Однако благодаря spread syntax, массив может быть с лёгкостью использован со словом new:
Чтобы использовать new с массивом параметров без spread syntax, вам потребуется использование частичного применения:
Без spread syntax, применение синтаксиса литерала массива для создания нового массива на основе существующего недостаточно и требуется императивный код вместо комбинации методов push, splice, concat и т.д. С spread syntax реализация становится гораздо более лаконичной:
Аналогично развёртыванию в массиве аргументов, ... может быть использован повсеместно и многократно в литерале массива.
Примечание: Spread syntax на самом деле переходит лишь на один уровень глубже при копировании массива. Таким образом, он может не подходить для копирования многоразмерных массивов, как показывает следующий пример: (также как и c Object.assign()) и синтаксис spred
Для конкатенации массива часто используется Array.concat:
С использованием spread syntax:
Array.unshift часто используется для вставки массива значений в начало существующего массива. Без spread syntax:
С использованием spread syntax [Следует отметить, что такой способ создаёт новый массив arr1. В отличие от Array.unshift, исходный массив не мутируется]:
Предложение Rest/Spread Properties for ECMAScript (стадия 4) добавляет свойства spread в литералы объекта. Оно копирует собственные перечисляемые свойства данного объекта в новый объект.
Поверхностное копирование (без прототипа) или объединение объектов теперь возможно с использованием более короткого, чем Object.assign(), синтаксиса.
Обратите внимание, что Object.assign() запускает setters, а spread syntax нет.
Обратите внимание, что вы не можете заменить или имитировать функцию Object.assign():
В приведённом выше примере оператор распространения не работает так, как можно было бы ожидать: он распространяет массив аргументов в литерал объекта благодаря параметру rest.
Spread syntax ( кроме случаев spread properties) может быть применён только к итерируемым объектам (iterable objects) :
При использовании spread оператора в вызовах функций необходимо быть внимательным к возможному переполнению в ядре JavaScript. Существует ограничение по максимально возможному количеству аргументов функции. См. apply() для уточнения.
Синтаксис для rest оператора выглядит таким же как и для spread оператора, однако он используется для деструктуризации массивов и объектов. Фактически, rest оператор противоположен spread оператору: последний раскладывает массив на элементы, тогда как первый собирает много элементов в один. См. rest parameters.
| ECMAScript® 2027 Language Specification # prod-SpreadElement |
| ECMAScript® 2027 Language Specification # prod-ArgumentList |
| ECMAScript® 2027 Language Specification # prod-PropertyDefinition |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 17 февр. 2025 г. by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.