js物件的深拷貝

2022-03-23 10:23:11 字數 735 閱讀 2834

關於物件的深拷貝一直是大家津津樂道乙個話題,本騷年通過研究(yuedu)發現還是很easy的。

首推的方法簡單有效,json.stringfy()和json.parse()即可搞定。但是這種簡單粗暴的方法有其侷限性。當值為undefinedfunctionsymbol會在轉換過程中被忽略。。。所以,物件值有這三種的話用這種方法會導致屬性丟失。

var syb = symbol('

obj'

);var person =,

ok: syb,

un: undefined

}var copy =json.parse(json.stringify(person))

// copy

//

所以如果物件值中有這哥仨的話就要採用別的方法了,比如自己寫個函式什麼的搞定,比如這樣。

function deepcopy(obj) ;

for (var key in

obj)

else}}

return

result;

}

還有一些object.assgin(), 陣列的slice()這些,這些只深複製了基本型別資料型別,不是真正意義的深複製,當然,如果要複製的物件或者陣列都是簡單資料型別,那就大膽用吧。

所謂方法,沒有最優,只有最合適的,所以選擇最合適的就ok啦。

js物件深拷貝

由於引用型別 陣列 物件 是按位址傳遞,直接拷貝是淺拷貝,即修改拷貝後的變數,原變數也會改變。有時需要深拷貝乙個物件,這時就需要遍歷徹底複製,使原物件和拷貝物件完全脫離關係。function deepcloneobj obj for i in obj return o 實現細節 假定傳入的是乙個引用...

js 物件深拷貝 關於JS深拷貝的學習

看了好多文章講js深拷貝的,但是測試了一下,還有很多地方不完善的,結合別人的 和自己的理解,自己實現了乙個深拷貝。首先要考慮拷貝的目標物件是不是 null,因為 typeof null 結果是 object,如果是null就直接返回null。然後我們再判斷各種包裝物件,因為基本資料型別的包裝物件,n...

js 物件深拷貝 深拷貝與淺拷貝

前言 最近在複習一些面試的知識點,剛剛好複習到了這一部分,於是就寫下這篇文章記錄一下。一 值型別和引用型別 在學習深拷貝和淺拷貝之前,我們先來了解一下js的變數型別。值型別 vs 引用型別 值型別 值型別主要有 number,string,boolean,symbol,null,undefined ...