一.淺拷貝
1.常見的情況
(1)對象等引用類型的賦值
(2)ES6新增的Object.assign() ,詳細可見阮一峰老師的書;
(3)自己寫一個
2.淺拷貝的問題
引用同一塊內存,修改新的值會影響舊的;
二.深拷貝
1.最簡單常見的一種方法
const newObj = JSON.parse(JSON.stringify(oldObj));
!該方法問題:
(1)無法實現對函數,稀疏數組,正則等特殊對象的拷貝
(2)會拋棄對象的constructor,所有的構造函數都指向了object。
(3)對象有循環(huán)引用,會報錯。
~ 補充知識點--稀疏數組的概念:
數組元素的索引不一定要連續(xù)的,它們之間可以有空缺。每個javaScript數組都有一個length屬性。針對非稀疏數組,該屬性就是數組元素的個數;針對稀疏數組,length比所有元素的個數要大。
2.遞歸實現一個深拷貝:
3.總之,自己寫一個完美的深拷貝函數,需要考慮很多種不同的情況,還是比較麻煩的,實際生產環(huán)境中,直接使用lodash的_.cloneDeep實現深度克隆就好;