資料複製是我們程式設計中經常會使用到的技術,對於普通數值資料來說,複製很簡單,但是對於複雜類型比如物件的複製,就會有很多需要考慮的東西,比如我們經常說到的深拷貝和淺拷貝。
2021-07-16 03:04:57
資料複製是我們程式設計中經常會使用到的技術,對於普通數值資料來說,複製很簡單,但是對於複雜類型比如物件的複製,就會有很多需要考慮的東西,比如我們經常說到的深拷貝和淺拷貝。
01淺拷貝
複製的物件和原始物件屬性相關聯。事實上,如果物件的任何欄位被其他物件引用,則它們共享相同的記憶體地址
02深拷貝
與淺拷貝不同,深拷貝複製物件的所有屬性,並且為新物件分配新的記憶體地址,我們對新物件的操作不會影響到原物件,看起來就像是將原物件所有的東西都重新複製出來一份。
03資料類型
JavaScript中的資料類型分為原始資料類型和複合資料類型。
原始資料進行復制克隆的時候,永遠都是新的副本,不會和原來資料進行關聯,而複合資料進行淺拷貝的時候,只是分配值的引用。
04創建深拷貝
對於克隆物件,如果我們想要進行深拷貝,那麼我們經常使用的方法就是JSON.parse()和JSON.stringify()。
05陣列Map,ForEach和Slice
對於普通的一維陣列,函數Map,ForEach,Slice都提供深拷貝的功能,但是對於巢狀陣列,這些函數對於內部陣列的處理不提供深拷貝的功能。
06總結
Object.assign和Object.create都可以進行物件的複製。
使用assign方法時,我們必須確保物件至少複製第二個參數。通常你只會傳遞一個空物件作為第一個參數。它不提供類似於擴展運算符的完整拷貝。
在 JavaScript 中複製物件的唯一陷阱是巢狀值。
相關文章
資料複製是我們程式設計中經常會使用到的技術,對於普通數值資料來說,複製很簡單,但是對於複雜類型比如物件的複製,就會有很多需要考慮的東西,比如我們經常說到的深拷貝和淺拷貝。
2021-07-16 03:04:57
這兩天比較熱的新聞事件大概就是谷歌被罰5億了吧,根據法國《巴黎人報》13日的報道,法國消費與競爭管理局因新聞版權紛爭對谷歌公司罰款5億歐元。那麼問題來了,到底是什麼樣的新
2021-07-16 03:04:53
iOS15 Beta3 來臨在今天凌晨,蘋果推送了 iOS15 第三個測試版本,最近蘋果更新頻率還是很高的,在昨天還推出了 iOS14.7 的最終版。從上個測試版本更新上來的話,本次更新包約 1.2GB
2021-07-16 03:04:43
最新訊息,根據Canalys資料統計,2021年Q2季度全球手機銷量迎來了大洗牌,這次Canalys給出的前五名中,有三家來自中國的廠商,分別是小米、OPPO和vivo。根據資料顯示,排名第一的仍然是
2021-07-16 03:04:35
【7月15日訊】相信大家都知道,在最近一段時間,芬蘭的百年通訊巨頭諾基亞正式向國內手機廠商—OPPO發起了5G專利訴訟,目的就是為了收取OPPO手機所使用的諾基亞5G專利技術的專利
2021-07-16 03:04:03
今天微信釋出了8.0.8 正式版,雖然官方的更新說明上依舊只寫了「修復一些已知問題」,但根據教授實測,新版本終於更換訊息提示音和來電鈴聲了。相信大家早就厭煩了系統預設的提示
2021-07-16 03:03:56