为什么改变一个已经推送到数组中的对象也会改变数组中的值呢?
Why does changing an object you've already pushed to an array change the value in the array as well?
检查此代码:
var bbb = [];
var aaa = {};
aaa.test = "1";
bbb.push(aaa);
console.log(bbb[0].test);
aaa.test = "2";
bbb.push(aaa);
console.log(bbb[0].test);
为什么控制台输出是"1,2"?我觉得应该是"1,1"
对象通过引用添加到数组中。因此,当您执行bbb[0]
时,它指的是您先前创建并随后修改的aaa
实例。
如果你不想要这种行为,你需要在添加对象之前克隆它。
bbb.push(clone(aaa))
对于clone()
的实现,如果您有jQuery:
function clone(obj) {
return jQuery.extend({}, obj);
}
和不使用jQuery:
function clone(obj) {
return JSON.parse(JSON.stringify(obj));
}
将aaa
的引用传递给数组。因此,当您对aaa
进行更改时,它会反映在数组的第一个元素中。
相关文章:
- d3.根据数组内容改变各个节点的颜色
- 从中删除元素后,javascript 数组的长度不会改变
- Javascript排序的数组会改变窗口对象,但在遍历它时不会改变
- 保持数组的顺序,但改变索引的位置
- JavaScript数组随着DOM的改变而改变
- 在函数内改变JavaScript数组
- Ng-repeat与指令:如何销毁重复项目后,数组已经改变
- 为什么数组'的长度属性'的值改变,即使在javascript中设置为只读
- 我如何使一个按钮改变Javascript数组位置
- Knockout:在改变可观察数组后设置select的标题
- 在不改变整个状态的情况下改变state数组(REACT / REDUX)
- 为什么knockoutjs js不't更新视图,如果一些子数组被改变
- Javascript array. prototype.sort()无意中改变了数组
- 根据数组中对象的数量改变id (javascript/jquery)
- Javascript数组一起改变
- react.js在改变状态数组后不更新DOM
- 如何改变传递给函数的数组,而不需要在javascript中迭代它的项
- KnockoutJS:模板不会在可观察数组改变时更新(只在添加时更新,在删除时有效)
- 如何使用jQuery和图像数组改变#header的css属性
- 数据绑定-在Javascript中数组改变时更新有序列表