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