Аператар 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);
}