關於js深淺拷貝的方法

2021-10-25 18:33:38 字數 1294 閱讀 2474

1、採用json轉換的形式

json

.parse

(json

.stringify()

)

2、通過jquery的extend形式

var array =[1

,2,3

,4];

var newarray = $.

extend

(true,[

],array)

;

3、通過遞迴的形式

function

deepclone

(obj)

;// 進行深拷貝的不能為空

if(obj &&

typeof obj ===

'object'

)else}}

}return objclone;

}

4、通過object.assign()拷貝

當物件只有一級屬性的時候,沒有第二級屬性,則此方法是深拷貝,

如果有第二級屬性,則二級以後都是淺拷貝

5、lodash函式庫實現深拷貝

lodash很熱門的函式庫,提供了 lodash.

clonedeep

()實現深拷貝

import lodash from

'lodash'

var obj =

,fn:

function()

};var obj2 = lodash.

clonedeep

(obj)

;obj2.name.a =

'obj2'

;console.

log(obj,obj2)

lodash的clonedeep函式能夠很方便的拷貝物件,但是一旦拷貝一些很複雜的物件就有可能報錯。

比如用clonedeep轉殖乙個vue例項,就有可能包key.charat is not a function的錯。

(正確的拷貝方法是vue.

extend

())。

一般來說複雜的物件都會內建拷貝方法,使用內建的方法拷貝會比lodash的clonedeep要安全得多。

遇到比較簡單的物件我們們應該直接呼叫clone方法而不是clonedeep

(或者json

.parse

(json

.stringify

(obj)

)),這樣既保險也可以減少效能損耗。

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