關於物件的深拷貝一直是大家津津樂道乙個話題,本騷年通過研究(yuedu)發現還是很easy的。
首推的方法簡單有效,json.stringfy()和json.parse()即可搞定。但是這種簡單粗暴的方法有其侷限性。當值為undefined
、function
、symbol
會在轉換過程中被忽略。。。所以,物件值有這三種的話用這種方法會導致屬性丟失。
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 ...