js深淺拷貝

2022-08-26 02:48:09 字數 988 閱讀 3344

淺拷貝: 建立乙個新物件,這個物件有著原始物件屬性值的乙份精確拷貝。如果屬性是基本型別,拷貝的就是基本型別的值,如果屬性是引用型別,拷貝的就是記憶體位址 ,所以如果其中乙個物件改變了這個位址,就會影響到另乙個物件。

深拷貝: 將乙個物件從記憶體中完整的拷貝乙份出來,從堆記憶體中開闢乙個新的區域存放新物件,且修改新物件不會影響原物件。

淺拷貝的實現方式:

object.assign() 方法: 用於將所有可列舉屬性的值從乙個或多個源物件複製到目標物件。它將返回目標物件。

array.prototype.slice():slice() 方法返回乙個新的陣列物件,這一物件是乙個由 begin和end(不包括end)決定的原陣列的淺拷貝。原始陣列不會被改變。

拓展運算子`…`:[...arr]

深拷貝的實現方式:

乞丐版: json.parse(json.stringify(object)),缺點諸多(會忽略undefined、symbol、函式;不能解決迴圈引用;不能處理正則、new date())

基礎版(面試夠用): 淺拷貝+遞迴 (只考慮了普通的 object和 array兩種資料型別)

1

function clonedeep(target,map = new

weakmap()) ;45

if(map.get(target))

8map.set(target, clonetarget);

9for(const key in

target)

12return

clonetarget

13 }else

1617 }

1

var deepcopy = function

(obj) ;

4for (var key in

obj) 8}

9return

newobj;10}

11var b4 = deepcopy(a);

JS深 淺拷貝

在js中,資料型別分為基本資料型別和引用資料型別兩種。對於基本資料型別來說,它的值直接儲存在棧記憶體中,而對於引用型別來說,它在棧記憶體中只是儲存了乙個指向對記憶體的引用,而真正的資料儲存在堆記憶體中。object array 這兩個就是引用型別,當我門直接去拷貝的話 copyobj obj 拷貝的...

js 深淺拷貝

深拷貝就是複製內部內容 淺拷貝就是複製記憶體位址 var obj 淺拷貝 引用傳遞 淺拷貝就是賦值,將鑰匙複製乙份 var o obj 深拷貝 內部內容複製乙份 將房子複製乙份 方法一 var str json stringify obj var obj3 json parse str 方法二 va...

js深淺拷貝

1.什麼是深淺拷貝 簡單的來說,加入b複製a a改變 如果b也跟著改變的話,那就是淺拷貝,反之是深拷貝 實現淺拷貝方法 1.賦值操作 var a 0 1,2 3,4 var b a a 0 5console log a 5,1,2,3,4 console log b 5,1,2,3,4 2.es6 ...