當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
javascript --- 实现对象的深拷贝
生活随笔
收集整理的這篇文章主要介紹了
javascript --- 实现对象的深拷贝
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
淺拷貝和深拷貝
- 淺拷貝: 只拷貝一層.當(dāng)對象是復(fù)雜數(shù)據(jù)類型(Object、 Array)時(shí),只拷貝引用
- 深拷貝: 多層拷貝.復(fù)雜數(shù)據(jù)類型,會重新分配內(nèi)存空間.
實(shí)現(xiàn)淺拷貝的2種方法
- 使用for ... in 實(shí)現(xiàn)
- 使用es6提供的方法Object.assign
上面用實(shí)現(xiàn)了將對象obj賦值給o. 但是,o中對屬性sex的操作.是引用操作.
即改變o.msg.sex屬性obj.msg.sex屬性也會改變.
實(shí)現(xiàn)深拷貝
很明顯上面并不是我們所需要的結(jié)果.
核心思路是,復(fù)雜數(shù)據(jù)類型賦值時(shí)先開辟內(nèi)存空間.
嘗試使用遞歸實(shí)現(xiàn)拷貝,思路如下:
- 測試:
稍微改進(jìn)一下
- 上面?zhèn)鬟f了2個(gè)參數(shù),且沒有考慮日期和正則的情況
- 改變遞歸出來的條件
- 使用typeof判斷是否是 數(shù)組和對象的形式
- 但是使用 typeof === ‘object’ 會遺漏掉掉null的情況
- 然后使用instanceof來判斷正則和日期的形式
總結(jié)
以上是生活随笔為你收集整理的javascript --- 实现对象的深拷贝的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 五、Matlab 画图——万能的plot
- 下一篇: javascript --- 文件上传