DEV Community

Cristian Fernando
Cristian Fernando

Posted on • Updated on

Paracetamol.js💊| #7: ¿Qué imprime este código JavaScript?

¿Qué imprime este código JavaScript?

let c = { greeting: "Hey!" };
let d;

d = c;
c.greeting = "Hello";
console.log(d.greeting);
Enter fullscreen mode Exit fullscreen mode
  • A: Hello
  • B: undefined
  • C: ReferenceError
  • D: TypeError

Respuesta en el primer comentario.


Top comments (1)

Collapse
 
duxtech profile image
Cristian Fernando • Edited

La respuesta es:

  • A: Hello

Cuando aplicamos el operador de asignación = entre objetos pensado que así lograremos obtener una copia del mismo estamos cayendo en un error de novato.

Recuerda que los objetos se manejan segun su referencia y no por su valor como lo hacen los tipos primitivos del lenguaje, esto significa que al hacer esto:

let c = { greeting: "Hey!" };
let d;

d = c;
Enter fullscreen mode Exit fullscreen mode

No solo estamos copiando los valores del objeto c al objeto d sino que también copiamos su referencia en memoria. Esta referencia es la dirección donde dicho objeto se almacenerá en el disco duro del ordenador; en JavaScript al ser un lenguaje de alto nivel no podemos acceder a dichas direcciones como en lenguajes de bajo nivel como por ejemplo lenguaje ensamblador.

Dicho en otras palabras, las direcciones de memoria del objeto c y del objeto d son las mismas, apuntan a la misma dirección, por ello, cuando intentamos modificar el objeto c:

c.greeting = "Hello";
Enter fullscreen mode Exit fullscreen mode

En realidad, estamos modificando ambos objetos.


Para crear copias de objetos de manera segura se recomienda usar el spread operator con su sintaxis de tres puntos ...

let c = { greeting: "Hey!" };
let d;

d = {...c};

c.greeting = "Hello";
console.log(d.greeting); // Hey!
console.log(c.greeting); // Hello
Enter fullscreen mode Exit fullscreen mode

Este método solo sirve para copiar objetos en el primer nivel, si deseamos realizar copias de objetos anidados se puede recurrir a otras alternativas como por ejemplo JSON.stringify.