В чем разница между operator Rest и Spread

«В чем разница между operator Rest и Spread» — вопрос из категории JavaScript, который задают на 10% собеседований Frontend Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Rest и Spread используют одинаковый синтаксис (...), но работают противоположно:

Spread разворачивает массив/объект на отдельные элементы:

const arr = [1, 2, 3];
console.log(...arr); // 1 2 3

const obj1 = {a: 1};
const obj2 = {...obj1, b: 2}; // {a: 1, b: 2}

Rest собирает оставшиеся элементы в массив/объект:

function sum(a, ...rest) {
  // rest = [2, 3] при вызове sum(1, 2, 3)
}

const {a, ...rest} = {a: 1, b: 2, c: 3}; 
// rest = {b: 2, c: 3}

Ключевое отличие: Spread - разбирает, Rest - собирает. Spread используется в выражениях, Rest - в объявлениях параметров/деструктуризации.