В JavaScript,
spread
оператор и
rest
оператор обозначаются одинаково (
...
), но используются в различных контекстах и решают разные задачи.
### Spread оператор (
...
)
#### Основное назначение:
Spread оператор используется для расширения элементов итерируемого объекта (например, массивов или строк) в местах, где ожидается ноль или более аргументов (в вызовах функций) или элементов (в массивах).
#### Примеры использования:
1.
В функциях:
javascript
function sum(a, b, c) {
return a + b + c;
}
const nums = [1, 2, 3];
console.log(sum(...nums)); // Расширяет массив nums в аргументы функции sum
2.
В массивах:
javascript
const first = [1, 2, 3];
const second = [4, 5, 6];
const combined = [...first, ...second]; // Объединяет два массива
console.log(combined);
3.
В объектах (ES2018+):
javascript
const obj1 = { foo: 'bar', x: 42 };
const obj2 = { foo: 'baz', y: 13 };
const mergedObj = { ...obj1, ...obj2 }; // Объединяет два объекта
console.log(mergedObj);
### Rest оператор (
...
)
#### Основное назначение:
Rest оператор используется для сбора всех оставшихся элементов (аргументов функции, элементов массива) в один массив.
#### Примеры использования:
1.
В функциях:
javascript
function collect(...args) {
console.log(args);
}
collect(1, 2, 3, 4); // Вывод: [1, 2, 3, 4]
2.
В деструктуризации массивов:
javascript
const numbers = [1, 2, 3, 4, 5];
const [first, second, ...rest] = numbers;
console.log(rest); // [3, 4, 5] — оставшиеся элементы массива
3.
В деструктуризации объектов (ES2018+):
javascript
const { x, y, ...restObj } = { x: 1, y: 2, a: 3, b: 4 };
console.log(restObj); // { a: 3, b: 4 }
### Заключение:
- Spread используется для "распределения" или "раскрытия" элементов из массивов, объектов или строк в литералы массива, объекта или аргументы функции.
- Rest используется для сбора переменного количества элементов в массив или получения оставшихся частей объектов.