深復(fù)制和淺復(fù)制最根本的區(qū)別在于是否是真正獲取了一個(gè)對象的復(fù)制實(shí)體,而不是引用矫夯。
深拷貝和淺拷貝是只針對Object和Array這樣的引用數(shù)據(jù)類型的。
淺復(fù)制 —-只是拷貝了基本類型的數(shù)據(jù)吊洼,而引用類型數(shù)據(jù)训貌,復(fù)制后也是會(huì)發(fā)生引用,我們把這種拷貝叫做“(淺復(fù)制)淺拷貝”冒窍,換句話說递沪,淺復(fù)制僅僅是指向被復(fù)制的內(nèi)存地址,如果原地址中對象被改變了综液,那么淺復(fù)制出來的對象也會(huì)相應(yīng)改變款慨。
深復(fù)制 —-在計(jì)算機(jī)中開辟了一塊新的內(nèi)存地址用于存放復(fù)制的對象。
通俗一點(diǎn)理解就是淺拷貝出來的數(shù)據(jù)并不獨(dú)立谬莹,如果被復(fù)制的對象改變了檩奠,那么淺拷貝的對象也會(huì)改變,深拷貝之后就會(huì)完全獨(dú)立附帽,與淺拷貝斷絕關(guān)系埠戳。
深拷貝的實(shí)現(xiàn)方式:
- JSON.parse(JSON.stringify())
image.png
原理: 用JSON.stringify將對象轉(zhuǎn)成JSON字符串,再用JSON.parse()把字符串解析成對象蕉扮,一去一來整胃,新的對象產(chǎn)生了,而且對象會(huì)開辟新的棧喳钟,實(shí)現(xiàn)深拷貝屁使。
這種方法雖然可以實(shí)現(xiàn)數(shù)組或?qū)ο笊羁截悾荒芴幚砗瘮?shù)奔则。
2.手寫遞歸方法
遞歸方法實(shí)現(xiàn)深度克隆原理:遍歷對象屋灌、數(shù)組直到里邊都是基本數(shù)據(jù)類型,然后再去復(fù)制应狱,就是深度拷貝。
image.png -
函數(shù)庫lodash
image.png