Posted on • Edited on
Comprendiendo la copia profunda en JavaScript
JavaScript no necesita presentaciones, es un lenguaje robusto con mucha versatilidad, pero si has trabajado con él, probablemente hayas notado algunos comportamientos inusuales. Uno de ellos es cómo JavaScript maneja las copias de variables, particularmente cuando trabajamos con objetos. En este artículo, exploraremos el concepto decopia profunda y cómo nos ayuda a evitar problemas inesperados al duplicar datos en nuestros programas.
Cuando hacemos una copia de una variable, JavaScript crea un nuevo espacio de memoria y allí guarda el valor copiado; luego, la nueva variable apunta a este nuevo espacio de memoria. Por ejemplo:
x=5;y=x;
y está apuntando a un nuevo espacio de memoria, el cual tiene el mismo valor quex, es decir, 5. Visualmente, sería algo como esto:
El concepto anterior se aplica solo a valores primitivos, para los objetos es diferente. Imagina que tenemos los siguientes dos objetos:
leta={name:'Rick',lastName:'Sanchez',};letb=a;
En el ejemplo anterior,b no tiene su propio espacio de memoria como podríamos esperar; en lugar de eso,b está apuntando al espacio de memoria dondea está guardado.
¿Qué problemas podría causar este comportamiento? Básicamente, si cambias cualquier campo dea ob, ambas variables cambiarán. Ejecuta el siguiente código y verifícalo tú mismo.
leta={name:'Rick',lastName:'Sanchez',};letb=a;b.name='Morty';console.log('a:',a);// a: { name: 'Morty', lastName: 'Sanchez' }console.log('b:',b);// b: { name: 'Morty', lastName: 'Sanchez' }
¿La solución para esto? Necesitamos hacer una copia profunda para guardar el valor de a en un nuevo espacio de memoria independiente al que b apunta.
constb=JSON.parse(JSON.stringify(a));
De esta manera, estamos forzando a JavaScript a crear un nuevo espacio de memoria al cambiar el formato de Objeto a JSON. Esto se hace utilizando el métodostringify, luego el JSON con su propio espacio de memoria se convierte nuevamente en un Objeto con el métodoparse, por lo que ambas variables permanecen totalmente independientes.
¿Te ha ocurrido alguna vez este extraño comportamiento? Házmelo saber en los comentarios, ¡estaré encantado de leerte!
Top comments(2)

Gracias por el artículo. Creo que hay una errata en el siguiente párrafo
En el ejemplo anterior, b no tiene su propio espacio de memoria como podríamos esperar; en lugar de eso,a está apuntando al espacio de memoria donde a está guardado.
Debería ser:
En el ejemplo anterior, b no tiene su propio espacio de memoria como podríamos esperar; en lugar de eso,b está apuntando al espacio de memoria donde a está guardado.

- LocationColombia
- Joined
Tienes razón, gracias por la observación
For further actions, you may consider blocking this person and/orreporting abuse