关于js的深拷贝与浅拷贝

在js中对于对象的拷贝方法:
1.使用slice与concat可对不好含对象的数组进行拷贝,用例如下:

var a = [1,2,3];
var b = a.slice();
b[0] = 0;
console.log('a',a,,'b',b);

输出//a [ 1, 2, 3 ] b [ 0, 2, 3 ]

反例

var c = [{a:1,b:2},{c:3,d:4}];
var d = c.slice();
d[0].a = 0;
console.log('c',c,'d',d);

输出//	c [ { a: 0, b: 2 }, { c: 3, d: 4 } ] 
	//	d[ { a: 0, b: 2 }, { c: 3, d: 4 } ]

可以看到,当数组包含对象时,使用上述方法是实现不了深拷贝

正确方法

var e = [{a:1,b:2},{c:3,d:4}];
var f = JSON.parse(JSON.stringify(e));
f[0].a = 0;
console.log('e',e,'f',f);

输出//  e [ { a: 1, b: 2 }, { c: 3, d: 4 } ] 
   //  f [ { a: 0, b: 2 }, { c: 3, d: 4 } ]

当然也可以自己写递归函数来实现深拷贝,如果有些对象通过上述方法拷贝不了。如类似于前端使用word对象中的range,是实现不了上述方法的拷贝。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值