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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章