У меня простой вопрос
let obj1 = {};
obj2= obj1;`
Здесь obj1 и obj2 ссылаются на один и тот же объект в памяти, то есть obj1===obj2 --> true
. Таким образом, по этой логике любая операция над obj2 повлияет на obj1.
Теперь, если я назначу свойство obj2
let obj1 = {};
obj2 = obj1;
obj2['a'] = {};
obj2 = obj2['a']; // why this operation didn't change obj1, if they are referencing the same object ?
console.log(obj1); // -- > { a: {} };
console.log(obj2); // -- > {};
теперь obj1===obj2 --> false
почему это ?
Также Как получилось obj2 = {} is different then obj2 = obj2['a']
?
Скриншот для пояснения себя
Заранее благодарны за Вашу помощь.
obj2 = obj2.a
переназначаетobj2
, чтобы он больше не указывал наobj1
. - person Aplet123   schedule 22.12.2020obj2 = obj2[a]
, вы переназначаете имя идентификатораobj2
на совершенно новое значение, а не просто добавляете свойство. - person Andrew Li   schedule 22.12.2020obj2 = {}
. Однако, если мы делаемobj2['b'] = {}; obj2 = obj2['b'];
, это также изменяетobj1
на{'a':{'b':{}}}
. Эта часть меня смущает. - person niraj   schedule 22.12.2020obj2.b = {}
не переназначаетobj2
, а присваивает значение свойствуobj2
, то есть оно по-прежнему указывает наobj1
, то есть изменения будут отражены вobj1
.obj2 = obj2.b
не имеет значения. - person Aplet123   schedule 22.12.2020obj2.a = {}; obj2 = obj2.a;
obj1
указывает на тот же объект, что и раньше.obj2
нет; он указывает на свойствоa
объекта, на который указываетobj1
.obj1 === obj2.a
. Затем, если вы добавите свойствоb
кobj2
, вы просто вложите другое свойство вobj2
. Посколькуobj1
по-прежнему указывает на «корневой» объект, естественно, он отражает все изменения. - person Sebastian Simon   schedule 22.12.2020