¿Qué imprime este código JavaScript?
let c = { greeting: "Hey!" };
let d;
d = c;
c.greeting = "Hello";
console.log(d.greeting);
- A:
Hello
- B:
undefined
- C:
ReferenceError
- D:
TypeError
Respuesta en el primer comentario.
For further actions, you may consider blocking this person and/or reporting abuse
Mike Young -
Wafa Bergaoui -
Naym Hossen -
Balaharinath C -
Top comments (1)
La respuesta es:
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:
No solo estamos copiando los valores del objeto
c
al objetod
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 objetod
son las mismas, apuntan a la misma dirección, por ello, cuando intentamos modificar el objetoc
: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
...
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
.