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