Оператор rest в JavaScript

Данный урок начнем с некоторого пояснения. Все предыдущие уроки данного раздела я не говорил вам всей правды про оператор ...

На самом деле этот оператор в зависимости от места в коде может называться либо оператором spread, либо оператором rest.

Как вы уже знаете, когда оператор spread стоит перед массивом или строкой, он разделяет их на отдельные значения. Оператор rest, хотя и имеет такой же синтаксис в виде ..., но предназначен для другого.

Сейчас будем разбираться, для чего. Пусть у нас есть функция, принимающая два параметра:

javascriptfunction func(a, b) {
  console.log(a);
  console.log(b);
}

Вы должны уже знать, что если в функцию передать лишние параметры, это не приведет к ошибке:

javascriptfunc(1, 2, 3, 4, 5);

Оператор rest позволяет получить все лишние параметры в виде массива. Для этого в функцию добавляется еще один параметр (обязательно последним), перед которым пишутся 3 точки:

javascriptfunction func(a, b, ...rest) {
  
}

Эти три точки и есть оператор rest, а имя переменной может иметь любое название, но обычно также принято называть его rest.

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

javascriptfunc(1, 2, 3, 4, 5);

function func(a, b, ...rest) {
  console.log(a);    // выведет 1
  console.log(b);    // выведет 2
  console.log(rest); // выведет [3, 4, 5]
}

Если лишних параметров не будет, то в переменную rest запишется пустой массив:

javascriptfunc(1, 2);

function func(a, b, ...rest) {
  console.log(a);    // выведет 1
  console.log(b);    // выведет 2
  console.log(rest); // выведет []
}

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

javascriptfunction func(...rest) {
  console.log(rest);
}