Операторы Rest и Spread

Три точки ... работают по-разному в зависимости от контекста: spread расширяет, rest собирает.

Spread — расширение массивов/объектов

const arr1 = [1, 2, 3]
const arr2 = [4, 5, 6]

const combined = [...arr1, ...arr2]
// [1, 2, 3, 4, 5, 6]

const copy = [...arr1]  // поверхностная копия

Math.max(...arr1)  // 3

// Слияние объектов
const obj1 = { a: 1, b: 2 }
const obj2 = { b: 3, c: 4 }
const merged = { ...obj1, ...obj2 }
// { a: 1, b: 3, c: 4 }

Rest — сбор оставшихся параметров

// «Собери оставшиеся параметры и положи их в массив»
let goFun = (...rest) => {
  return rest
}

function sum(...numbers) {
  return numbers.reduce((total, n) => total + n, 0)
}
sum(1, 2, 3)       // 6
sum(1, 2, 3, 4, 5) // 15
⚠️ Важно

Параметр rest всегда должен быть последним в списке параметров.

Различие