JavaScript的深拷貝和淺拷貝

基本數(shù)據(jù)類型:number芭碍、string徒役、boolean、null窖壕、undefined忧勿。
引用數(shù)據(jù)類型(Object類):對象、數(shù)組艇拍、函數(shù)狐蜕。

  1. 基本數(shù)據(jù)類型---名值都存在棧內(nèi)存中
    let a=1
    棧內(nèi)存

    當復制b=a的時候,棧內(nèi)存會開辟一個新的內(nèi)存卸夕。
    復制之后层释,棧內(nèi)存

    即使修改a=2,這時候?qū)并不會有任何影響快集。
  2. 引用數(shù)據(jù)類型--名存在棧內(nèi)存中贡羔,值存在于堆內(nèi)存中,但是棧內(nèi)存會提供一個引用地址指向堆內(nèi)存中的值
    引用數(shù)據(jù)類型的內(nèi)存

    當b=a進行拷貝的時候个初,其實復制的是a的引用地址乖寒,而并非堆里面的值
    淺拷貝

    當我們修改a[0]=1之后,由于a和b指向的同一個地址院溺,所以b也受到影響楣嘁,這就是淺拷貝。

    如果能在堆內(nèi)存開辟一個新的內(nèi)存專門存放b的值,就如同基本類型那樣逐虚,就達到了深拷貝的效果了聋溜。
    深拷貝
  3. 實現(xiàn)深拷貝
  • 封裝深拷貝函數(shù)
function deepClone(obj) {
    let tempClone = Array.isArray(obj) ? [] : {};    //判斷是數(shù)組還是對象
    if (obj && typeof tempClone === 'object') {
        for (let key in obj) {
            if (obj.hasOwnProperty(key)) {
                if (obj[key] && typeof obj[key] === "object") {
                    tempClone[key] = deepClone(obj[key]);
                } else {
                    tempClone[key] = obj[key];
                }
            }
        }
    }
    return tempClone;
}
  • 使用JSON對象的parse和stringify
function deepClone(obj){
    let _obj = JSON.stringify(obj);
    let objClone = JSON.parse(_obj);
    return objClone
}
  • 借用JQ的extend方法
    $.extend( [deep ], target, object1 [, objectN ] )
    • deep表示是否深拷貝,為true為深拷貝叭爱,為false撮躁,則為淺拷貝
    • target Object類型目標對象,其他對象的成員屬性將被附加到該對象上买雾。
    • object1 objectN可選把曼。Object類型第一個以及第N個被合并的對象。
let a=[0,1,[2,3],4];
let b=$.extend(true,[],a);
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末漓穿,一起剝皮案震驚了整個濱河市嗤军,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌器净,老刑警劉巖型雳,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異山害,居然都是意外死亡,警方通過查閱死者的電腦和手機沿量,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門浪慌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人朴则,你說我怎么就攤上這事权纤。” “怎么了乌妒?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵汹想,是天一觀的道長。 經(jīng)常有香客問我撤蚊,道長古掏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任侦啸,我火速辦了婚禮槽唾,結果婚禮上,老公的妹妹穿的比我還像新娘光涂。我一直安慰自己庞萍,他們只是感情好,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布忘闻。 她就那樣靜靜地躺著钝计,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上私恬,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天债沮,我揣著相機與錄音,去河邊找鬼践付。 笑死秦士,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的永高。 我是一名探鬼主播隧土,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼命爬!你這毒婦竟也來了曹傀?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤饲宛,失蹤者是張志新(化名)和其女友劉穎皆愉,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體艇抠,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡幕庐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了家淤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片异剥。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖絮重,靈堂內(nèi)的尸體忽然破棺而出冤寿,到底是詐尸還是另有隱情,我是刑警寧澤青伤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布督怜,位于F島的核電站,受9級特大地震影響狠角,放射性物質(zhì)發(fā)生泄漏号杠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一擎厢、第九天 我趴在偏房一處隱蔽的房頂上張望究流。 院中可真熱鬧,春花似錦动遭、人聲如沸芬探。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽偷仿。三九已至哩簿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間酝静,已是汗流浹背节榜。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留别智,地道東北人宗苍。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像薄榛,于是被迫代替她去往敵國和親讳窟。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

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

  • 原文 博客原文 大綱 前言1敞恋、對深拷貝和淺拷貝的初步認識2丽啡、深拷貝和淺拷貝的區(qū)別3、淺拷貝存在的缺陷4硬猫、深拷貝的實...
    前端路上的小兵閱讀 421評論 0 3
  • js里面有一個數(shù)據(jù)類型為object(如json和數(shù)組)补箍,它創(chuàng)建的是一塊內(nèi)存區(qū)域,存放的是一個地址啸蜜,所以當你直接將...
    bc63f6792451閱讀 449評論 0 0
  • 值類型與引用類型 談淺拷貝與深拷貝之前坑雅,我們需要先理清一個概念,即值類型與引用類型衬横。 什么是值類型與引用類型霞丧?這要...
    franose閱讀 612評論 1 8
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,089評論 1 32
  • 新鮮書簡單報 先上主角 左手韓的老馬 國漫作家中比較勵志的就是他了,追星也最是揪心冕香,星爺?shù)恼J可估計他可以好好走下去...
    馬甲_季姬擊雞急閱讀 317評論 1 2