javascript - 对象 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?),但没有得到令人满意的解释。
解决方案
当您推送一个对象时,您添加了第一个对象的引用,这就是它更新为 2 的原因
您正在创建新对象并分配给 obj 并更改该对象不会更改数组值,因为它指向不同的引用。
推荐阅读
- sql - 不在sql server中的运算符不起作用
- javascript - 动态地将类添加到来自数组的 *ngFor 内容
- rest - Flask REST - 更新用户模型
- python - Python 执行 shell 并打印标准输出
- laravel - Laravel 5.4:通知延迟,仅根据条件执行
- reactjs - 我可以在没有任何参数的情况下传递 MapstateToProps 吗?
- javascript - 无缘无故包含当前网址的 HTML 链接
- asp.net-web-api - 在 asp.net 核心应用程序中查找 API 端点的控制器方法
- c - 如何读取文件并跳过 x 行
- filter - 可观察的事件过滤器和超时