在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,是實現不了上述方法的拷貝。