CodeForge

JavaScript de Cero a Experto / Objetos

Spread: copiar, combinar y actualizar sin mutar

Teoría20 min20 XP

En arrays aprendiste a preferir lo inmutable: toSorted en vez de sort. Con objetos, la herramienta para ese estilo es el operador spread (...): tres puntos que "vuelcan" el contenido de un objeto o array dentro de otro nuevo. Con él copias, combinas y "actualizas" sin tocar jamás el original.

Volcar la caja

Spread en objetos

La regla de oro: en un choque de claves, gana la que aparece más tarde. Por eso el patrón para actualizar es siempre { ...original, campo: nuevo } — primero vuelcas todo, y al final tapas lo que quieres cambiar. Este patrón exacto es el corazón del manejo de estado en React y Redux: nunca mutar, siempre crear la versión nueva.

Spread en arrays

Rest: los tres puntos al revés

Los mismos ... en el lado IZQUIERDO de un destructuring significan lo contrario: "recoge todo lo que sobre".

¿Te suena? Es el mismo rest de los parámetros de función del módulo 3 (function total(...montos)). Truco para no confundirte: si los ... DESARMAN algo en un lugar donde se construye (objeto/array/llamada nuevos), es spread; si RECOGEN sobras donde se desempaca (destructuring/parámetros), es rest.

Quieres el objeto config = { tema: 'oscuro', fuente: 'grande' } pero con tema 'claro', sin mutar el original. ¿Cuál lo logra?

Mini-reto

En "Mi Bolsillo": parte de const gasto = { nombre: "Cine", valor: 25000 }. Crea gastoCompleto agregándole categoria con spread, luego gastoCorregido cambiándole el valor a 28000 (sin mutar ninguno de los anteriores), y comprueba con console.log que los tres objetos son distintos y el original sigue intacto. Cierra quitándole valor con rest.

Qué sigue

Habrás notado que insistimos en "objetos NUEVOS" y en copia === gasto dando false. Hay una razón profunda: las variables no guardan objetos, guardan REFERENCIAS a ellos — y no entender eso produce los bugs más desconcertantes de JavaScript. La próxima lección lo deja claro de una vez: referencias vs copias, y la copia profunda con structuredClone.