Операторы 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 всегда должен быть последним в списке параметров.
Различие
...в конце параметров функции = rest (собирает в массив)...в вызовах функций или других местах = spread (извлекает элементы)