Я хочу понять следующее поведение при перемещении объектов в массив.
(1) Я создаю объект, создаю свойство объекта и затем помещаю его в массив.
var array = [];
var obj = {};
obj.x = 1;
array.push(obj);
console.log(array); //Output [{x: 1}]
Рассмотрим две альтернативы:
(2a): я изменяю свойство объекта и изменяю объект, указанный в массиве:
obj.x = 2;
console.log(array); //Output [{x: 2}] ... it has been changed
(2b вместо2a ) Я делаю ссылку на объект на новый объект и создаю свойство, исходный объект, на который ссылается массив, не изменяется:
obj = {}; //Change reference to new object
obj.x = 2;
console.log(array); //Output [{x: 1}] ... it is unchanged
Почему это так?
PS: Я заметил, что это различие обсуждается здесь ( Объекты помещаются в массив в javascript глубокой или неглубокой копии? ), но это не объясняется удовлетворительно.