¿Las variables / objetos se pasan por valor y por qué no puedo cambiar la propiedad del objeto con variable en javascript? [duplicar]
Esta pregunta ya tiene una respuesta aquí:
¿Es JavaScript un lenguaje de paso por referencia o de paso por valor? 29 respuestasSupongamos que tengo un objeto como:
var obj = {
len: 4,
bred: 5
}
Ahora supongamos que asigno este objeto a una variablex
comovar x = obj;
. Por lo que yo entiendo, crea una copia deobj
y asignar esa copia ax
- eso es pasar por valor. Ahora si cambio una propiedad dex
entonces cambia esa propiedad del objeto obj también. P.ej.
x.len = 99
Entonces ambosobj.len
yx.len
volverse99
. Por otro lado, considere este escenario:
var r = 2, s = 3, t = 4;
s = r;
s = 88;
Ahorar
se pasa por valor as
eses
una copia der
fue dado as
. Tan cambiantes
a88
no cambia el valor original der
variable. Mecanografíar
en la consola todavía da2
.
Pregunta 1: Si las variables (objetos incluidos) se pasan por valor en JavaScript, ¿por qué cambiarx.len
cambiar el originalobj.len
, ¿también?
Otro problema es que no puedo cambiar la propiedad de un objeto cuando lo asigno a una variable. Considere este escenario:
var obj2 = {
len: 4,
bred: 5
}
var x2;
x2 = obj.len;
Ahora escribiendox2
en la consola simplemente regresa4
. Pero si trato de cambiar el valor dex2
comox2 = 77;
entonces eso no cambiaobj2.len
.
Pregunta 2: ¿Por qué no puedo cambiar la propiedad del objeto con una variable?