Данный урок начнем с некоторого пояснения.
Все предыдущие уроки данного раздела я не
говорил вам всей правды про оператор ...
На самом деле этот оператор в зависимости от места в коде может называться либо оператором spread, либо оператором rest.
Как вы уже знаете, когда оператор spread
стоит перед массивом или строкой, он разделяет
их на отдельные значения. Оператор rest,
хотя и имеет такой же синтаксис в виде ...
,
но предназначен для другого.
Сейчас будем разбираться, для чего. Пусть у нас есть функция, принимающая два параметра:
function func(a, b) {
console.log(a);
console.log(b);
}
Вы должны уже знать, что если в функцию передать лишние параметры, это не приведет к ошибке:
func(1, 2, 3, 4, 5);
Оператор rest
позволяет получить все
лишние параметры в виде массива. Для этого
в функцию добавляется еще один параметр (обязательно
последним), перед которым пишутся 3
точки:
function func(a, b, ...rest) {
}
Эти три точки и есть оператор rest, а имя
переменной может иметь любое название, но
обычно также принято называть его rest
.
Давайте вызовем нашу функцию с избыточным
количеством параметров и посмотрим, что попадает
в параметры a
и b
, а что -
в остаток rest
:
func(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
запишется пустой массив:
func(1, 2);
function func(a, b, ...rest) {
console.log(a); // выведет 1
console.log(b); // выведет 2
console.log(rest); // выведет []
}
Все параметры в массив
В функции вообще может не быть параметров,
но при этом в нее можно добавить rest
:
function func(...rest) {
console.log(rest);
}
В этом случае функцию можно будет вызвать
с любым количеством параметров и все они
будут попадать в массив rest
.