js js的淺拷貝和實現深拷貝的方式

2021-10-09 05:17:21 字數 1055 閱讀 9072

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...