Переменные / объекты передаются по значению, и почему я не могу изменить свойство объекта с помощью переменной в JavaScript? [Дубликат]
На этот вопрос уже есть ответ здесь:
Является ли JavaScript языком передачи по ссылке или передачей по значению? 29 ответовПредположим, у меня есть объект как:
var obj = {
len: 4,
bred: 5
}
Теперь предположим, что я назначил этот объект переменнойx
какvar x = obj;
, Насколько я понимаю, он создает копиюobj
и назначить эту копиюx
- то есть передать по значению. Теперь, если я изменю свойствоx
затем он также изменяет это свойство объекта obj. Например.
x.len = 99
Тогда обаobj.len
а такжеx.len
становиться99
, С другой стороны рассмотрим этот сценарий:
var r = 2, s = 3, t = 4;
s = r;
s = 88;
Сейчасr
передается по значениюs
тотs
копияr
был данs
, Так меняетсяs
в88
не меняет первоначальное значениеr
переменная. Typingr
в консоли все еще выдает2
.
Вопрос 1: Если переменные (включая объекты) передаются по значению в JavaScript, тогда почему происходит изменениеx.len
изменить оригиналobj.len
, тоже?
Другая проблема заключается в том, что я не могу изменить свойство объекта при назначении переменной. Рассмотрим этот сценарий:
var obj2 = {
len: 4,
bred: 5
}
var x2;
x2 = obj.len;
Сейчас набираюx2
в консоль просто возвращается4
, Но если я попытаюсь изменить значениеx2
такие какx2 = 77;
тогда это не изменитсяobj2.len
.
Вопрос 2: Почему я не могу изменить свойство объекта с помощью переменной?