关于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,是实现不了上述方法的拷贝。

发布了16 篇原创文章 · 获赞 2 · 访问量 2108

猜你喜欢

转载自blog.csdn.net/py_boy/article/details/103714562