Оператор rest в JavaScript

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

На самом деле этот оператор в зависимости от места в коде может называться либо оператором 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.