首页 > 解决方案 > 对象 push() 到数组中

问题描述

我希望了解将对象推入数组时的以下行为。

(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:我注意到这里讨论了这种区别(Do objects push into an array in javascript deep or shallow copy?),但没有得到令人满意的解释。

标签: javascriptarraysreference

解决方案


  1. 当您推送一个对象时,您添加了第一个对象的引用,这就是它更新为 2 的原因

  2. 您正在创建新对象并分配给 obj 并更改该对象不会更改数组值,因为它指向不同的引用。


推荐阅读