关于对象数组的拷贝

发现了一个坑, 自己平时没有太多去想,今天做code review的时候 发现了: 先po上代码

let myArray =[{onset: 1},{onset1: 2},{onset2:3}];
let myArray2 = [];
for(let i=0; i<myArray.length; i++){
	myArray2.push(myArray[i]);
}

for(let i=0; i<myArray2.length; i++){

myArray2[i].onset5=5;
}

console.log(myArray);
console.log(myArray2);

结果发现这两个console都是 输出都是 :
 

[{x: 1, a: 5}, {y: 2, a: 5}, {z: 3, a: 5}]

但是一直记得 Array的push 是深拷贝, 为什么我给myArray2 添加key 和 value, 但是myArray也被改变了. 后来想到了, myArray2有自己的指针,而且的确跟myArray不一样, 但是我推入的是 item类型的 object, 推入的是指针, 而深拷贝的object, 如果想要做深拷贝, 需要在push之前深拷贝一份object 然后传入进去.

 

继续做一下测试 :

的确 是两个不一样的数组;

 

继续做测试 :

 

果然 增加了myArray2 里面的key, myArray 并没有受影响;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值