PassFront
  1. PassFront
  2. База знаний
  3. Современный JS ES6+

В чем разница между spread и rest операторами?

Современный JS ES6+

Spread и rest используют один синтаксис `...`, но противоположны по смыслу: spread разворачивает, rest собирает.

Spread — разворачивает

Распаковывает итерируемое или свойства объекта в отдельные элементы. Используется при вызове функции и создании массива/объекта.

const arr = [1, 2, 3];
const copy = [...arr, 4];        // разворот в новый массив
const obj = { ...user, age: 25 }; // разворот свойств
Math.max(...arr);                 // разворот в аргументы

Rest — собирает

Упаковывает оставшиеся элементы/аргументы в массив или объект. Используется в параметрах функции и при деструктуризации.

function sum(...nums) {           // собирает аргументы
  return nums.reduce((a, b) => a + b, 0);
}

const [first, ...others] = [1, 2, 3];   // others = [2, 3]
const { id, ...rest } = { id: 1, a: 2 }; // rest = { a: 2 }

Как отличить по контексту

  • Слева от = или в параметрах функции → rest (собирает).
  • Справа от =, в вызове или литерале → spread (разворачивает).
function f(...args) {}  // rest
f(...[1, 2, 3]);        // spread

Коротко для собеседования

Синтаксис ... один, смысл противоположный: spread разворачивает массив/объект в элементы (вызов, создание, копирование), rest собирает оставшееся в массив/объект (параметры, деструктуризация). Контекст определяет роль.

Другие вопросы раздела