更新時間:2020-10-16 來源:黑馬程序員 瀏覽量:
如果實現一個拷貝,相信大家都之前學習過一個叫Object.assign({}, obj)這樣一個方法,我們都知道這是淺拷貝,當我們去將拷貝的對象修改某個復雜數據的屬性的時候,被拷貝的對象的字段也會進行修改,我們開看一個案例。
我們發(fā)現當我們修改了obj2中的stu的name字段,兩個對象中的name字段都變成了小紅,這就是我們所說的淺拷貝.
那我們如何實現一個深拷貝呢,有的會想到JSON.parse(JSON.stringify(obj));這個方法確實可以實現深拷貝,我們先來驗證下結果。
通過查看我們確實發(fā)現可以實現一個對象的深拷貝,但是這種方式也會有些弊端,如:
1.性能問題,stringify再解析其實需要耗費較多時間,特別是數據量大的時候。
2.一些類型無法拷貝,例如函數(不輸出),正則(輸出空對象),時間對象(輸出時間字符串),Undefiend(不輸出)等等問題
那我們如何使用js來實現一個深拷貝呢。
通過以上方式使用函數遞歸的方式,判斷需要拷貝的數據中字段的數據類型,為新的空對象追加新的字段實現了深拷貝。
猜你喜歡: