a=[1,2,3,4,5];
b=a;
對a賦值操作,b的值也改變為淺拷貝,b的值不變為深拷貝
淺拷貝賦值的是引用位址,指標指向同乙個堆空間
深拷貝則是相當於新增乙個位址,指標指向不同堆空間
實現深拷貝:
1.使用es6
var a=[1,2,3]
var b=[...a];
b.push(4);
console.log(b);//1,2,3,4
console.log(a)//1,2,3
2.使用concat()方法
var a=[1,2,3]
var c=;
var b=c.concat(a);
b.push(4);
console.log(b);//1,2,3,4
console.log(a)//1,2,3
3.使用slice()方法
var a=[1,2,3]
var b=a.slice(0);
b.push(4);
console.log(b);//1,2,3,4
console.log(a)//1,2,3
複雜深拷貝(物件或者陣列)
1.使用json物件的stringify和parse方法
var a=[1,2,3]
var b=json.parse(json.stringify(a));
b.push(4);
console.log(b);//1,2,3,4
console.log(a)//1,2,3
2.使用遞迴
function deep(obj) ;
//進行深拷貝的不能為空,並且是物件或者是
if (obj && typeof obj === "object") else }}
} return objclone;
}
淺拷貝和深拷貝的簡單實現
function clone origin,target 如果沒有傳target的話就自動傳乙個空物件進去 for var key in origin return target 淺拷貝有個缺點,就是如果origin或者target的引用值 array object 型別的值改變的話,一定會影響到另...
C 淺拷貝和深拷貝的實現
拷貝 複製 為物件建立副本,即將物件中的所有字段複製到新的物件 副本中 拷貝有兩種 淺拷貝和深拷貝,微軟建議用型別繼承icloneable介面的方式明確該型別是可以被拷貝的,icloneable介面只提供了乙個clone方法,需要根據需要在clone方法內實現淺拷貝或深拷貝。1 淺拷貝 把源物件中的...
前端的深拷貝和淺拷貝 深拷貝與淺拷貝的區別
淺拷貝的方式 淺拷貝1 var obj var newobj obj newobj.name 李四 console.log obj console.log newobj 淺拷貝2 object.assgin 引數1 目標物件 引數2 任意多個物件 如果物件是多層的話 var obj var obj1...