Volver a la lista

Spread/Rest — ... lo que hacen tres puntos.

Se explica cómo se utiliza la sintaxis de propagación (Spread) para expandir un array u objeto y la sintaxis de resto (Rest) para recopilar los elementos restantes en JavaScript.

Principiante
|
5min
|
Verificado (2026-07)
Progreso0/55 (0%)

Spread/Rest: la función de los tres puntos

Al finalizar este tema

Comprenderá que ... tiene dos funciones: "expandir" (Spread) y "recolectar" (Rest).


El mismo símbolo, diferentes funciones

En JavaScript, ... cambia de función según su posición:

  • Spread: "Expande" un array u objeto.
  • Rest: "Recolecta" los valores restantes.

Es el mismo ..., pero realiza acciones opuestas según dónde se utilice.


Spread: Expandir

Expande un array:

javascript
const a = [1, 2, 3];
const b = [0, ...a, 4];
// [0, 1, 2, 3, 4]

...a extrae y enumera los elementos del arreglo a uno por uno. También se utiliza para copiar un arreglo:

javascript
const original = [1, 2, 3];
const copy = [...original];

Los objetos también se expanden:

javascript
const defaults = { theme: "light", lang: "ko" };
const userSettings = { lang: "en", fontSize: 14 };
const config = { ...defaults, ...userSettings };
// { theme: "light", lang: "en", fontSize: 14 }

El objeto siguiente sobrescribe las claves existentes. Este es el patrón para combinar la configuración predeterminada con la configuración personalizada.

También se utiliza al pasar un array como argumento de una función:

javascript
const nums = [3, 1, 4, 1, 5];
Math.max(...nums); // 5

Rest: Recopilar

Permite recibir “el resto de los parámetros” como un arreglo en la función:

javascript
function sum(first, ...rest) {
  console.log(first); // 1
  console.log(rest);  // [2, 3, 4, 5]
  return rest.reduce((a, b) => a + b, first);
}
sum(1, 2, 3, 4, 5); // 15

...rest recopila todos los elementos restantes después del primer argumento en una lista.

También se utiliza en la desestructuración:

javascript
const [head, ...tail] = [1, 2, 3, 4];
// head: 1, tail: [2, 3, 4]

const { name, ...others } = { name: "Alice", age: 25, city: "Seoul" };
// name: "Alice", others: { age: 25, city: "Seoul" }

Es útil cuando se desea agrupar todos los elementos excepto una propiedad específica.


Cómo diferenciar entre Spread y Rest

javascript
// Spread — "desde el lado que inserta" se despliega
const arr = [...other];
func(...args);

// Rest — "desde el lado que recibe" se recopila
function func(...params) {}
const [a, ...rest] = arr;

En el lugar donde se pasa un valor (lado derecho de la asignación, llamada a función), se usa Spread. En el lugar donde se recibe un valor (lado izquierdo de la asignación, declaración de función), se usa Rest.


Patrón práctico: actualización inmutable

Al actualizar el estado en React, no debes modificar el objeto original. Crea un nuevo objeto con Spread:

javascript
const [user, setUser] = useState({ name: "Alice", age: 25 });

setUser({ ...user, age: 26 });

Al agregar elementos a una matriz:

javascript
const [items, setItems] = useState(["a", "b"]);

setItems([...items, "c"]); // agregar al final
setItems(["z", ...items]); // agregar al inicio

El array u objeto original no se modifica; se crea uno nuevo.


Conceptos clave

... funciona como operador de expansión en el lado del emisor y como operador de recopilación en el lado del receptor. Con el operador de expansión se pueden copiar y combinar arrays u objetos, mientras que con el operador de recopilación se pueden agrupar los valores restantes. Es el patrón más utilizado en las actualizaciones de estado inmutable de React.

💬 Preguntas y comentarios

0 comentarios

Puedes publicar sin iniciar sesión. Los comentarios de invitados no pueden editarse ni eliminarse después.

0/2000

Cargando...