區(qū)別:
1、淺拷貝只復制指向某個對象的指針匆赃,而不復制對象本身,新舊對象還是共享同一塊內(nèi)存今缚。
2炸庞、深拷貝會創(chuàng)造一個一模一樣的對象,新對象和原對象不共享內(nèi)存荚斯,修改新對象不會改變原對象。
注意:
解構(gòu)賦值查牌,如果所解構(gòu)的原對象是一維數(shù)組或?qū)ο笫缕冢浔举|(zhì)就是對基本數(shù)據(jù)類型進行等號賦值,那它就是深拷貝纸颜;如果是多維數(shù)組或?qū)ο笫奁浔举|(zhì)就是對引用類型數(shù)據(jù)進行等號賦值,那它就是淺拷貝胁孙。
實現(xiàn)方式:
淺拷貝:
1唠倦、基于Object.assign
2、基于for in
3涮较、...原地展開
深拷貝:
1稠鼻、借用JSON對象的parse和stringify
2、使用遞歸的方式
3狂票、Object.assign()拷貝候齿,當對象中只有一級屬性,沒有二級屬性的時候,此方法為深拷貝慌盯,但是對象中有對象的時候周霉,此方法,在二級屬性以后就是淺拷貝亚皂。
4俱箱、lodash函數(shù)庫 提供了lodash.cloneDeep()
拓展:
基本類型:Number、String 灭必、Boolean狞谱、Null和Undefined〕Р疲基本數(shù)據(jù)類型是按值訪問的芋簿,因為可以直接操作保存在變量中的實際值
引用類型:Object、Array 璃饱、Function 与斤、Data等。引用數(shù)據(jù)類型是保存在堆內(nèi)存中的對象荚恶,只能操作對象在棧內(nèi)存中的引用地址