js裡的深拷貝和淺拷貝

2021-09-12 13:33:50 字數 1151 閱讀 9129

引用資料型別:名在棧中,值在堆記憶體中

淺拷貝:拷貝的是引用位址,並非堆裡面的值

深拷貝:複製所有層級屬性

深拷貝實現方法:三種

1、遞迴複製所有層級屬性

2、借用json物件的parse和stringify

3、jq的extend方法

陣列的slice()和concat()方法不是真正的深拷貝,只能把一級屬性深拷貝,二級屬性不能拷貝成功。

slice()的例子:

let a=[1,2,3,4] , b=a.slice();

a[0]=2;

console.log(a,b);

例子二:

let a=[0,1,[2,3],4) , b=a.slice();

a[0]=1;

a[2][0] = 1;

console.log(a,b);

1、遞迴複製實現深度拷貝

function deepclone(obj);

if(obj && typeof obj===「object」)else}}

return objclone;}}

let a=[1,2,3,4] , b=deepclone(a);

a[0] = 2;

console.log(a,b);

2、借用json物件的parse 和 stringify

function deepclone(obj)

let a=[0,1,[2,3],4], b=deepclone(a);

a[0] = 1;

a[2][0] = 1;

console.log(a,b);

3、借用jq的extend方法

$.extend([deep],target,object1[,objectn])

deep表示是否深度拷貝,為true為深拷貝,為false,則為淺拷貝

target object 型別 目標物件, 其他物件的成員屬性將被附加到該物件上

object1 objectn可選。第一及第n個被合併的物件

let  a=[0,1,[2,3],4], b=$.extend(true,,a);

a[0]=1;

a[2][0]=1;

console.log(a,b);

JS深拷貝和淺拷貝

js中物件分為基本型別和復合 引用 型別,基本型別存放在棧記憶體,復合 引用 型別存放在堆記憶體中 堆記憶體中用於存放由new建立的物件,棧記憶體存放一些基本型別的變數和物件的引用變數 對於簡單變數,記憶體小,直接複製不會發生引用 var a 123 var b a a 123456 console...

JS淺拷貝和深拷貝

1.淺拷貝 copy var obj1 物件存放於堆記憶體中,物件中的鍵值對,值可以為物件,可以為陣列.var obj2 obj1 物件,陣列之間只有引用賦值 obj2.name 撒哈哈 當改動物件obj2的時候,obj1的key對應的value也會更改這是淺拷貝 深拷貝 var obj1 var ...

js深拷貝和淺拷貝

走在前端的大道上 var m var n m n.a 15 這時m.a的值是多少 m.a會輸出15,因為這是淺拷貝,n和m指向的是同乙個堆,物件複製只是複製的物件的引用。深拷貝和上面淺拷貝不同,就是徹底copy乙個物件,而不是copy物件的引用,例如,還是之前的例子,我們這麼寫 var m var ...