El operador rest en JavaScript

Comenzaremos esta lección con una aclaración. En todas las lecciones anteriores de esta sección, no te dije toda la verdad sobre el operador ...

En realidad, este operador, dependiendo de su ubicación en el código, puede llamarse operador spread u operador rest.

Como ya sabes, cuando el operador spread se coloca antes de un array o una cadena, los divide en valores individuales. El operador rest, aunque tiene la misma sintaxis ..., está diseñado para otro propósito.

Ahora vamos a averiguar para qué. Supongamos que tenemos una función que acepta dos parámetros:

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

Ya debes saber que si se pasan parámetros adicionales a la función, esto no producirá un error:

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

El operador rest permite obtener todos los parámetros adicionales en forma de array. Para ello, se añade un parámetro más a la función (obligatoriamente el último), delante del cual se escriben 3 puntos:

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

Estos tres puntos son el operador rest, y el nombre de la variable puede ser cualquiera, pero normalmente también se suele llamar rest.

Llamemos a nuestra función con un exceso de parámetros y veamos qué llega a los parámetros a y b, y qué - al resto rest:

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

function func(a, b, ...rest) {
  console.log(a);    // muestra 1
  console.log(b);    // muestra 2
  console.log(rest); // muestra [3, 4, 5]
}

Si no hay parámetros adicionales, en la variable rest se guardará un array vacío:

javascriptfunc(1, 2);

function func(a, b, ...rest) {
  console.log(a);    // muestra 1
  console.log(b);    // muestra 2
  console.log(rest); // muestra []
}

La función puede no tener parámetros en absoluto, pero aún así se puede añadir rest. En este caso, la función se puede llamar con cualquier número de parámetros y todos ellos se guardarán en el array rest:

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