詳談Javascript中的深複製和淺複製
導讀 | 資料複製是我們程式設計中經常會使用到的技術,對於普通數值資料來說,複製很簡單,但是對於複雜型別比如物件的複製,就會有很多需要考慮的東西,比如我們經常說到的深複製和淺複製。 |
複製的物件和原始物件屬性相關聯。事實上,如果物件的任何欄位被其他物件引用,則它們共享相同的記憶體地址。
與淺複製不同,深複製複製物件的所有屬性,並且為新物件分配新的記憶體地址,我們對新物件的操作不會影響到原物件,看起來就像是將原物件所有的東西都重新複製出來一份。
JavaScript中的資料型別分為原始資料型別和複合資料型別。
數值,字串,布林值,undefined,null為原始資料型別,而陣列和物件則是複合型別。
原始資料進行復制克隆的時候,永遠都是新的副本,不會和原來資料進行關聯,而複合資料進行淺複製的時候,只是分配值的引用。
對於克隆物件,如果我們想要進行深複製,那麼我們經常使用的方法就是JSON.parse()和JSON.stringify()。
對於普通的一維陣列,函式Map,ForEach,Slice都提供深複製的功能,但是對於巢狀陣列,這些函式對於內部陣列的處理不提供深複製的功能。
Object.assign和Object.create都可以進行物件的複製。
使用assign方法時,我們必須確保物件至少複製第二個引數。通常你只會傳遞一個空物件作為第一個引數。它不提供類似於擴充套件運算子的完整複製。
使用create方法時,現有物件作為新建立物件的原型建立一個新物件。現有物件作為原型可用,從而使所有屬性都可用於新物件。但就複製而言,它提供了部分深複製,如分配和擴充套件運算子。
在 JavaScript 中複製物件的唯一陷阱是巢狀值。
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2784525/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JavaScript 淺複製和深複製JavaScript
- 淺談JS中物件的淺複製和深複製JS物件
- JavaScript中的淺複製與深複製JavaScript
- Java中物件的深複製和淺複製詳解Java物件
- JS物件複製:深複製和淺複製JS物件
- C#中的物件深複製和淺複製C#物件
- 淺複製和深複製的概念與值複製和指標複製(引用複製)有關 淺複製 “指標複製 深複製 值複製指標
- go slice深複製和淺複製Go
- python 深複製和淺複製Python
- Java引用複製、淺複製、深複製Java
- Java 中的深複製和淺複製你瞭解嗎?Java
- go的深複製跟淺複製Go
- python深複製和淺複製的區別Python
- c#淺複製與深複製C#
- python 淺複製、深複製坑Python
- js 淺複製和深複製的區別和應用JS
- 對於複製普通物件 深複製和淺複製是否一樣物件
- js 淺拷貝(淺複製、淺克隆)、深拷貝(深複製、深克隆)JS
- 【JavaScript】聊一聊js中的淺複製與深複製與手寫實現JavaScriptJS
- 深入理解JavaScript之深淺複製JavaScript
- python 的深淺複製Python
- 25. 深淺複製
- Day 7.5 資料型別總結 + 複製 淺複製 深複製資料型別
- js 實現深複製/深複製JS
- 深入剖析 JavaScript 的深複製JavaScript
- Python列表的深淺複製Python
- 淺顯直白的Python深複製與淺複製區別說明Python
- Python中的賦值與淺複製與深複製之間的關係Python賦值
- 聊一聊web前端那些事兒,關於深複製和淺複製Web前端
- 資料共享(淺複製)與資料獨立(深複製)
- js 深複製JS
- JavaScript之structuredClone現代深複製JavaScriptStruct
- 淺複製、深複製與序列化【初級Java必需理解的概念】Java
- 設計模式-原型模式(Prototype)【重點:淺複製與深複製】設計模式原型
- python 深/淺複製及其區別Python
- Go 語言傳值和深淺複製問題Go
- JavaScript 深複製的迴圈引用問題JavaScript
- 整明白 Golang slice 宣告方式、淺複製現象、深複製、append操作GolangAPP