Solo quería saber por qué en mi código he cambiado cr = 6 en un método, pero al imprimir el valor obj cr original, no se cambia a 6, pero sigue siendo su valor original. ¿Por qué? Si, en cambio, uso cr.next = 6, entonces el valor se cambia en el obj
original. Espero obj.next = 6
. La salida generada es:
{ val: 1, next: { val: 2, next: { val: 3, next: null } } }
Esperaba que la salida fuera así:
{ val: 1, next: 6 }
let obj = { val: 1, next: { val: 2, next: { val: 3, next: null } } } cr = obj.next; cr = 6; console.log(obj)
La primera parte,
cr = obj.next;
Significa "El valor del identificador (la palabra cr
) es el valor en la ubicación de la memoria que es el objeto obj.next
"
cr = 6;
Significa "Ignorar por completo cualquier valor anterior de cr
; el valor del identificador cr
ahora es el literal entero 6
"
JavaScript, a diferencia de C/C++ (con punteros o pass-by-reference vs pass-by-value), no tiene forma de cambiar el valor de un objeto con un único identificador (nombre de variable). Puede cambiar el valor de la variable, pero no el objeto al que apuntaba anteriormente.
let obj = { val: 1, next: { val: 2, next: { val: 3, next: null } } } cr = obj.next; cr = 6; console.log(obj) console.log("...........................") obj.next = 6 console.log(obj) console.log("...........................") console.log(cr) cr = obj.next; cr = 6;
Cuando haces cr = obj.next
, crea una nueva variable y asigna el valor obj.next a cr. Después de eso, asigna 6 a cr para que sobrescriba el valor actual de cr y solo habrá 6.
Si desea una respuesta como {val: 1, next: 6}
, debe escribir obj.next = 6
para obtener el resultado deseado.
Espero que te ayude a "seguir codificando".