As variáveis / objetos são passados por valor e por que não posso alterar a propriedade do objeto com variável em javascript? [duplicado]
Esta pergunta já tem uma resposta aqui:
O JavaScript é uma linguagem de passagem por referência ou de passagem por valor? 29 respostasSuponha que eu tenha um objeto como:
var obj = {
len: 4,
bred: 5
}
Agora, suponha que eu atribua esse objeto a uma variávelx
Comovar x = obj;
. Tanto quanto eu entendo, ele cria uma cópia doobj
e atribua essa cópia ax
- isso é passar por valor. Agora, se eu alterar uma propriedade dex
depois, altera também essa propriedade do objeto obj. Por exemplo.
x.len = 99
Então ambosobj.len
ex.len
tornar-se99
. Por outro lado, considere este cenário:
var r = 2, s = 3, t = 4;
s = r;
s = 88;
Agorar
é passado por valor paras
estes
uma cópia der
foi dado as
. Então mudandos
para88
não altera o valor original der
variável. Digitandor
no console ainda dá2
.
Questão 1: Se variáveis (objetos incluídos) são passadas por valor em JavaScript, por que alterarx.len
mude o originalobj.len
, também?
Outro problema é que não posso alterar a propriedade de um objeto ao atribuir a uma variável. Considere este cenário:
var obj2 = {
len: 4,
bred: 5
}
var x2;
x2 = obj.len;
Agora digitandox2
no console simplesmente retorna4
. Mas se eu tentar mudar o valor dex2
tal comox2 = 77;
então isso não mudaobj2.len
.
Questão 2: Por que não consigo alterar a propriedade do objeto com uma variável?