Explica este código JavaScript
let objeto1 = { valor: 10 };
let objeto2 = objeto1;
let objeto3 = { valor: 10 };
console.log(objeto1 == objeto2);
console.log(objeto1 == objeto3);
objeto1.valor = 15;
console.log(objeto2.valor);
console.log(objeto3.valor);
A. true
, false
, 15
, 10
B. false
, true
, 10
, 20
C. true
, true
, 15
, 20
D. false
, false
, 20
, 15
Respuesta en el primer comentario.
Top comments (3)
Respuesta:
A.
true
,false
,15
,10
Al trabajar con objetos en javascript hay que difereciar 2 aspectos fundamentales: tener 2 referencias la mismo objeto y tener 2 objetos diferentes pero con las mismas propiedades.
Al crear
objeto1
estamos reservando un espacio en memoria para guardar dicho objeto.Cuando asignamos
objeto1
aobjeto2
lo único que hacemos es que ambos objetos apunten a la misma dirección de memoria donde esta almacenado elobjeto1
. En otras palabras, tantoobjeto1
yobjeto2
no son independientes el uno del otro, si modificamos uno el otro también se vera afectado.Como ambos apuntan a la misma dirección de memoria entonces al usar el operador débil de comparación
==
obtenemostrue
.Pero si comparamos el
objeto1
contra elobjeto3
tendremosfalse
puesto que si bien ambos tienen las mismas propiedades, estan almacenados en direcciones de memoria diferentes.Para finalizar, cuando hacemos:
Modificamos el
valor
deobjeto1
pero como apuntan a la misma dirección de momoria entonces también modificamos el valor delobjeto2
a15
.El
objeto3
no sufre ningún cambio.Si objeto3 no sufre cambios como es que empieza a 10 y acaba a 20 (?) ¿No tendrás una errata en la redacción?
Muchas gracias por darte cuenta, efectivamente es fue un error mio de redacción que ya esta arreglado. Un saludo