深淺拷貝你知道多少?(針對引用類型Object)

*?變量引用值才顿,

*?地址存儲值。

*?對象的拷貝:?將一個對象賦值給另外一個對象,?我們稱之為對象的拷貝

*?淺拷貝:?(只需要使用賦值運算符(=)即可)

原因:?淺拷貝只是對對象的引用地址進行了拷貝返奉,并沒有開辟新的堆棧,拷貝后吗氏,兩個對象指向的是同一個引用地址芽偏,所以修改其中一個對象的屬性,另一個對象的屬性也會改變弦讽。

????簡單來說就是?兩個變量?指向同一個?內(nèi)存地址污尉。所以一旦在?新變量?修改?變量值?,會影響被拷貝的原變量往产。因為他們指向同一個內(nèi)存地址被碗。

????code:?

????????var?ch?=?{

????????????name:?"chenhang",

????????????size:?"shou"

????????};

????????//將原對象直接賦值給新變量

????????var?ch2?=?ch;

????????ch2.name?=?"小基佬";

????????console.log(ch,?ch2);

*?深拷貝:?

????復(fù)制了一份內(nèi)存的值,同時開辟了一塊?新內(nèi)存?存放這個值仿村,值相同锐朴,但是內(nèi)存地址不相同。如果修改新變量的值蔼囊,不會對被拷貝的原變量產(chǎn)生影響焚志。

????code:

????????var?a?=?{

????????????name:?"zouhaohao",

????????????age:?"22",

????????????sex:?"boy"

????????}

????????//JSON.stringify?將對象轉(zhuǎn)化成字符串???JSON.parse?將字符串轉(zhuǎn)化成對象?

????????var?hh?=?JSON.parse(JSON.stringify(a));

????????hh.name??=?"聰明的小伙子";

????????console.log(a,?hh);

*?網(wǎng)上流傳Object.assign能夠?qū)崿F(xiàn)對象的深拷貝、slice和concat能夠?qū)崿F(xiàn)數(shù)組的深拷貝畏鼓,經(jīng)過測試酱酬,這些都只是披著深拷貝的外衣的淺拷貝。

????*?如何理解:?【披著深拷貝的外衣的淺拷貝】?云矫?

????????-?如果該對象屬性的值并沒有引用類型時膳沽,這三個方法均能實現(xiàn)深拷貝,實現(xiàn)對值的拷貝泼差。

????????-?一旦對象屬性的值為引用類型時贵少,只會對該值的引用地址進行拷貝。?這又回到了淺拷貝堆缘。

????????code:?

????????var?obj?=?{?age:?'11',?parent:?{?father:?'XX',?mother:?'XX'?}?};

????????var?newObj?=?Object.assign({},?obj);??//將obj中的參數(shù)復(fù)制到{}中滔灶,故參數(shù)順序不能反

????????obj.age?=?'12';

????????obj.parent['father']?=?'YY';?//對象里面的對象修改了。

????????console.log(obj);??????//?obj:?{?age:?'12',?parent:?{?father:?'YY',?mother:?'XX'?}?}?

????????console.log(newObj);???//?newObj:?{?age:?'11',?parent:?{?father:?'YY',?mother:?'XX'?}?實現(xiàn)了對obj對象的簡單屬性的深拷貝?但是對象的對象屬性確是淺拷貝吼肥。

????總結(jié)一下: MDN都說了Object.assign方法只會拷貝源對象自身的并且可枚舉的屬性到目標(biāo)對象录平。是用來合并對象的,人家拷貝的是屬性值缀皱,假如源對象的屬性值是一個對象的引用斗这,那么它也指向那個引用(這不是典型的淺拷貝的本質(zhì)嗎,指向同一個引用,即引用被修改了,指向所有該引用的所有屬性值都將修改.)

*?【如何實現(xiàn)真正的深拷貝】?

????1.?JSON.parse()

????????網(wǎng)上流傳的一個黑科技啤斗,使用var?newObj?=?JSON.parse(JSON.stringify(obj))可以實現(xiàn)對象的深拷貝表箭,但是該方法存在一些問題:

????????-?無法作用于函數(shù),RegExp特殊對象钮莲,不過對這些進行深拷貝免钻,我覺得并不需要彼水,如果有需要對函數(shù)進行深拷貝用途的地方,歡迎...

????????-?會拋棄對象的constructor极舔,所有的構(gòu)造函數(shù)都會指向Object凤覆。

????????-?對象有循環(huán)引用,會報錯拆魏。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盯桦,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子渤刃,更是在濱河造成了極大的恐慌拥峦,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卖子,死亡現(xiàn)場離奇詭異事镣,居然都是意外死亡,警方通過查閱死者的電腦和手機揪胃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來氛琢,“玉大人喊递,你說我怎么就攤上這事⊙羲疲” “怎么了骚勘?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長撮奏。 經(jīng)常有香客問我俏讹,道長,這世上最難降的妖魔是什么畜吊? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任泽疆,我火速辦了婚禮,結(jié)果婚禮上玲献,老公的妹妹穿的比我還像新娘殉疼。我一直安慰自己,他們只是感情好捌年,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布瓢娜。 她就那樣靜靜地躺著,像睡著了一般礼预。 火紅的嫁衣襯著肌膚如雪眠砾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天托酸,我揣著相機與錄音褒颈,去河邊找鬼柒巫。 笑死,一個胖子當(dāng)著我的面吹牛哈肖,可吹牛的內(nèi)容都是我干的吻育。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼淤井,長吁一口氣:“原來是場噩夢啊……” “哼布疼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起币狠,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤游两,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后漩绵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贱案,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年止吐,在試婚紗的時候發(fā)現(xiàn)自己被綠了宝踪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡碍扔,死狀恐怖瘩燥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情不同,我是刑警寧澤厉膀,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站二拐,受9級特大地震影響服鹅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜百新,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一企软、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧吟孙,春花似錦澜倦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至巷挥,卻和暖如春桩卵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工雏节, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留胜嗓,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓钩乍,卻偏偏與公主長得像辞州,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子寥粹,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容