有關JS 深拷貝和淺拷貝

2021-10-04 23:10:22 字數 883 閱讀 3506

首先深複製和淺複製只針對像 object, array 這樣的複雜物件的。簡單來說,淺複製只複製一層物件的屬性,而深複製則遞迴複製了所有層級。

淺拷貝:複製一層物件的屬性,並不包括物件裡面的為引用型別的資料,當改變拷貝的物件裡面的引用型別時,源物件也會改變。

實現深拷貝的集中方法:

1. 物件只有一層的話可以使用:object.assign()函式

object.assign({}, obj1) 跟我們手動複製的效果相同,所以一樣只能處理深度只有一層的物件,沒辦法做到真正的 deep copy。不過如果要複製的物件只有一層的話可以考慮使用它。
2. json.stringify

json.stringfy 只能拷貝number, string, boolean, array,這些能夠被 json 直接表示的資料結構。可以轉成json的物件才可以使用,像function()就不能拷貝。

3.遞迴拷貝

function deepclone(initalobj, finalobj) ;    

for (var i in initalobj)

if (typeof prop === 'object') ;

arguments.callee(prop, obj[i]);

} else

}

return obj;

}var str = {};

var obj = };

deepclone(obj, str);

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