С введением ES6 (ES2015) он в большей степени облегчил нашу жизнь благодаря различным функциям, и одна из них обозначена тремя точками с двумя разными вариантами использования…

а. Остальные параметры
б. Оператор спреда

Параметры остальных { …остальные

Основная идея Rest Params состоит в том, чтобы накапливать или собирать элементы любой сущности и упаковывать их как единое целое!

const employeeDetails = {
 name : "John Doe", 
 address : "NY" , 
 phone: "123-xxx", 
 salary : "xxxxx" 
}
const {salary, ...restParams} = employeeDetails
console.log(restParams) 
//Output : {name: "John Doe", address: "NY", phone: "123-xxx"}
console.log(salary) 
//Output : "xxxxx"

Таким образом, приведенный выше пример ясно показал, что мы деструктурировали свойство employeeDetails и, кроме свойства оклада, упаковали остальные свойства в единую сущность (restParams), перед которой стоят три точки
Примечание. имя одного объекта может быть любым, мы использовали имя restParams только для целей чтения соглашения.
Кроме того, чтобы не упускать из виду, остальные параметры должны быть последним объектом или последним аргументом при любом использовании.

В функциях: -

В JavaScript можно вызывать функцию с любым количеством аргументов.
Мы можем использовать параметр rest, когда не знаем, сколько аргументов будет использовано, или просто хотим собрать некоторые из них в массив.

Давайте попробуем пример, где мы суммируем все значения, отправленные в нашу функцию:

function sum(...args) {   
 let result = 0;    
 for (let arg of args) 
 {     
   result += arg;   
 }    
 return result 
}  
console.log(sum(4, 2)) // -> 6 
console.log(sum(3, 4, 5, 6)) // -> 18
Incorrect Use of Rest Params :-
 const {...restParams, salary} = employeeDetails
 //Output :- Error: Rest element must be last element
const {salary, ...restParams1, ...restParams2} = employeeDetails
//Output :- Error: Rest element must be last element
** ONLY A SINGLE USE OF REST PARAMS IS POSSIBLE IN AN EXPRESSION & IF USING THEN THAT SHOULD BE THE LAST OCCURANCE IN THE EXPRESSION**

Оператор спреда {…spread}

Оператор распространения в основном используется для распаковки элементов из объекта, он делает прямо противоположное тому, что делают параметры REST.

С точки зрения массивов:

const array1 = [1, 3, 2];
console.log(...array1); //Output : 1 2 3
Or to copy an Array,
const array1 = [1, 2, 3];
const array2 = [...array1]
console.log(array1) //Output : [1,2,3]
console.log(array2) //Output : [1,2,3]
To compose several values to one,
const array1 = [1, 2, 3];
const array2 = [0, ...array1, 4]
console.log(array2) //Output : [0, 1, 2, 3, 4]

С точки зрения объектов:

Copies properties:
const user = {   name: 'John Doe',   age: 25 };  
const clonedUser = { ...user };
console.log(clonedUser) //Output : { name: "John Doe", age: 25 }
Merge two entities:
const testTeam = {Batsmen : "Virat", Bowler: "Bumrah"};
const odiTeam = {Opener : "Rohit", Spinner: "Jadeja"};
const indianTeam = {...testTeam, ...odiTeam}
console.log(indianTeam)
//Output:- { Batsmen: "Virat", Bowler: "Bumrah", Opener: "Rohit", Spinner: "Jadeja" }

Таким образом, мы можем сделать вывод, что всякий раз, когда мы пытаемся извлечь определенные свойства из сущности или определенные значения в качестве параметров функции…
Параметры REST пригодятся и всякий раз, когда мы пытаемся иметь дело со всем набором используемых сущностей… Оператор РАСПРОСТРАНЕНИЯ пригодится!!

JS in ❤ !!