1.淺拷貝的定義
創(chuàng)建一個(gè)新對(duì)象,然后將當(dāng)前對(duì)象的非靜態(tài)字段復(fù)制到該新對(duì)象,如果字段是值類型的喇嘱,那么對(duì)該字段執(zhí)行復(fù)制;如果該字段是引用類型的話塞栅,則復(fù)制引用但不復(fù)制引用的對(duì)象。因此腔丧,原始對(duì)象及其副本引用同一個(gè)對(duì)象
簡(jiǎn)而言之放椰,淺拷貝僅僅復(fù)制所考慮的對(duì)象,而不復(fù)制它所引用的對(duì)象
2.深拷貝的定義
深拷貝是一個(gè)整個(gè)獨(dú)立的對(duì)象拷貝愉粤,深拷貝會(huì)拷貝所有的屬性砾医,并拷貝屬性指向的動(dòng)態(tài)分配的內(nèi)存。當(dāng)對(duì)象和它所引用的對(duì)象一起拷貝時(shí)即發(fā)生深拷貝衣厘。深拷貝相比于淺拷貝速度較慢并且花銷較大如蚜。
創(chuàng)建一個(gè)新對(duì)象,然后將當(dāng)前對(duì)象的非靜態(tài)字段復(fù)制到該新對(duì)象影暴,無(wú)論該字段是值類型的還是引用類型错邦,都復(fù)制獨(dú)立的一份。當(dāng)你修改其中一個(gè)對(duì)象的任何內(nèi)容時(shí)型宙,都不會(huì)影響另一個(gè)對(duì)象的內(nèi)容撬呢。
簡(jiǎn)而言之,深拷貝把要復(fù)制的對(duì)象所引用的對(duì)象都復(fù)制了一遍妆兑。
淺拷貝只是復(fù)制了對(duì)象的引用地址魂拦,兩個(gè)對(duì)象指向同一個(gè)內(nèi)存地址,所以修改其中任意的值搁嗓,另一個(gè)值都會(huì)隨之變化芯勘,這就是淺拷貝(例:assign())
深拷貝是將對(duì)象及值復(fù)制過(guò)來(lái),兩個(gè)對(duì)象修改其中任意的值另一個(gè)值不會(huì)改變腺逛,這就是深拷貝(例:JSON.parse()和JSON.stringify()荷愕,但是此方法無(wú)法復(fù)制函數(shù)類型)