JS學(xué)習(xí)筆記——淺拷貝與深拷貝

基礎(chǔ)類(lèi)型與引用類(lèi)型

五大基礎(chǔ)類(lèi)型

  • Underfied
  • Null
  • Boolean
  • Number
  • String

他們是固定大小的數(shù)據(jù)秸脱,存在棧中,按值傳遞部蛇。

let a = 1
let b = a // ?b拷貝a
console.log(b) // 1

a = 2 // a值變了
console.log(b) // 1摊唇,b值沒(méi)有變


對(duì)基本類(lèi)型來(lái)說(shuō),拷貝就是復(fù)制一份同樣的值給對(duì)方涯鲁,雙方不會(huì)被影響巷查。

而引用類(lèi)型存的是對(duì)象的引用地址有序,對(duì)象的大小不確定,存在堆中岛请,普通的賦值拷貝只會(huì)復(fù)制一遍引用地址旭寿,實(shí)質(zhì)上兩者還是指向同一個(gè)對(duì)象。

let a = {x : 1}
let b = a // ?b拷貝a
console.log(b) // {x : 1}

a = {x : 2} // a值變了
console.log(b) // {x : 2}崇败,b也變了

淺拷貝與深拷貝

上面的例子是普通的賦值拷貝盅称,證明了對(duì)引用類(lèi)型來(lái)說(shuō)賦值拷貝是無(wú)效的,所以我們又想到了遍歷一遍對(duì)象里的值后室,那不就搞定了嗎缩膝?這就是我們說(shuō)的淺拷貝啦。確實(shí)岸霹,對(duì)一個(gè)只有一層屬性且屬性均為基本屬性的對(duì)象來(lái)說(shuō)疾层,遍歷了一遍之后會(huì)拷貝成功,互不影響贡避。但是一旦存在有屬性又是引用類(lèi)型的話云芦,還是會(huì)出現(xiàn)一樣的問(wèn)題。

所以深拷貝的直觀理解就是贸桶,對(duì)引用類(lèi)型中每個(gè)屬性進(jìn)行遍歷拷貝,直到遇到基本類(lèi)型為止桌肴。

深淺拷貝的方案

淺拷貝方案

  • Object.assign() (兼容性不好)
  • Underscore —— _.clone()
  • lodash —— _.clone()
  • 數(shù)組中concat和slice方法

深拷貝方案

  • JSON.parse(JSON.stringify(obj))
    簡(jiǎn)單粗暴又有點(diǎn)dirty皇筛,但是能滿(mǎn)足日常需求,只能處理json能理解的數(shù)據(jù)格式坠七,當(dāng)然不包括函數(shù)了水醋,性能也沒(méi)有特別好
  • lodash —— _.cloneDeep()
    很好地兼容了ES6的新引用類(lèi)型,而且處理了環(huán)型對(duì)象的情況
  • jQuery —— $.clone() / $.extend()
    源碼適合初學(xué)者學(xué)習(xí)彪置,比較好理解

假如說(shuō)到要來(lái)一個(gè)萬(wàn)能的完美的深拷貝方案拄踪,哦?不存在的拳魁。深拷貝本來(lái)就沒(méi)有一個(gè)明確的定義惶桐,如何處理DOM節(jié)點(diǎn)的拷貝,如何拷貝原型的屬性潘懊,RegExp 怎么處理姚糊,函數(shù)怎么處理。授舟。救恨。在知乎上有人這樣問(wèn)??

JavaScript 如何完整實(shí)現(xiàn)深度Clone對(duì)象?

參考文章

深入剖析 JavaScript 的深復(fù)制

js淺復(fù)制與深復(fù)制的原理

詳解js深淺復(fù)制

JavaScript 深拷貝性能分析

結(jié)語(yǔ)

最近比較忙释树,其實(shí)最好還是和大家一起討論一下以上提及到的第三方庫(kù)優(yōu)秀的深拷貝源碼肠槽。擎淤。所以大家可以自行去學(xué)習(xí)~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市秸仙,隨后出現(xiàn)的幾起案子嘴拢,更是在濱河造成了極大的恐慌,老刑警劉巖筋栋,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炊汤,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡弊攘,警方通過(guò)查閱死者的電腦和手機(jī)抢腐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)襟交,“玉大人迈倍,你說(shuō)我怎么就攤上這事〉酚颍” “怎么了啼染?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)焕梅。 經(jīng)常有香客問(wèn)我迹鹅,道長(zhǎng),這世上最難降的妖魔是什么贞言? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任斜棚,我火速辦了婚禮,結(jié)果婚禮上该窗,老公的妹妹穿的比我還像新娘弟蚀。我一直安慰自己,他們只是感情好酗失,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布义钉。 她就那樣靜靜地躺著,像睡著了一般规肴。 火紅的嫁衣襯著肌膚如雪捶闸。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天奏纪,我揣著相機(jī)與錄音鉴嗤,去河邊找鬼。 笑死序调,一個(gè)胖子當(dāng)著我的面吹牛醉锅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播发绢,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼硬耍,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼垄琐!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起经柴,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤狸窘,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后坯认,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體翻擒,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年牛哺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了陋气。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脯丝。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡变过,死狀恐怖济舆,靈堂內(nèi)的尸體忽然破棺而出赋铝,到底是詐尸還是另有隱情,我是刑警寧澤挨稿,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布速址,位于F島的核電站辕棚,受9級(jí)特大地震影響奴曙,放射性物質(zhì)發(fā)生泄漏别凹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一洽糟、第九天 我趴在偏房一處隱蔽的房頂上張望番川。 院中可真熱鬧,春花似錦脊框、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至屿讽,卻和暖如春昭灵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背伐谈。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工烂完, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人诵棵。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓抠蚣,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親履澳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嘶窄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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

  • 值類(lèi)型與引用類(lèi)型 談淺拷貝與深拷貝之前怀跛,我們需要先理清一個(gè)概念,即值類(lèi)型與引用類(lèi)型柄冲。 什么是值類(lèi)型與引用類(lèi)型吻谋?這要...
    franose閱讀 612評(píng)論 1 8
  • 1.屬性的簡(jiǎn)潔表示法 允許直接寫(xiě)入變量和函數(shù) 上面代碼表明,ES6 允許在對(duì)象之中现横,直接寫(xiě)變量漓拾。這時(shí),屬性名為變量...
    雨飛飛雨閱讀 1,130評(píng)論 0 3
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類(lèi)型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,089評(píng)論 1 32
  • 鄉(xiāng)村兒童圖書(shū)館(公益性) 目前正在籌劃的圖書(shū)館戒祠,是一個(gè)公益性的鄉(xiāng)村兒童圖書(shū)館骇两,在楊瑾萱就讀的幼兒園旁邊。 這個(gè)圖書(shū)...
    莫邪Enya閱讀 829評(píng)論 1 2
  • 天氣太冷得哆,坐在房中脯颜; 還是不行,躺在床上贩据; 蓋上被子栋操,閉上眼睛; 睡意朦朧饱亮,進(jìn)入夢(mèng)境矾芙; 眨眼醒來(lái),暮色風(fēng)景近上; 這一...
    myth神話閱讀 158評(píng)論 0 1