實現(xiàn)一個深拷貝

1.如果是函數(shù)類型和普通類型直接返回原來的值。
2.如果是正則括授,直接返回原來的值坞笙。
3.如果是日期類型,直接返回原來的值荚虚。
4.需要新建一個WeakMap的表用來存儲被拷貝過的值薛夜,并且在遞歸的時候傳下去,這樣可以避免對象引用自己造成無限遞歸版述。
5.拷貝的時候只拷貝對象的私有屬性梯澜。

//deepClone
const deepClone = (value, hash = new WeakMap) => {
    if(value == null){ // 這里排除掉null 和 undefine 因為null == undefine
        return false  
    } 
    if(typeof value !== 'object') return value // 這里包含了函數(shù)類型
    if(value instanceof RegExp) return new RegExp(value)
    if(value instanceof Date) return new Date(value)
    // 根據(jù)當(dāng)前屬性構(gòu)造一個新的實例    
    let instance = new value.constructor
     // 這里做一下防止循環(huán)引用的處理
     if(hash.has(value)){
        return hash.get(value)
    }
    hash.set(value, instance) // 已經(jīng)拷貝過的存放在表里作為記錄
    for (const key in value) {
        if (value.hasOwnProperty(key)) { // 只拷貝私有屬性
           instance[key] = deepClone(value[key], hash) // 這里表向下傳遞作為記錄
        }
    }
    return instance
}

// test
let obj = {
    name: 'teacc',
    age: 25,
    other:{
        a: 1
    }
}
obj.b = obj
let cloneObj = deepClone(obj)
cloneObj.other.a = 2
console.log(obj)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市渴析,隨后出現(xiàn)的幾起案子晚伙,更是在濱河造成了極大的恐慌,老刑警劉巖俭茧,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咆疗,死亡現(xiàn)場離奇詭異,居然都是意外死亡母债,警方通過查閱死者的電腦和手機午磁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門尝抖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人迅皇,你說我怎么就攤上這事昧辽。” “怎么了登颓?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵搅荞,是天一觀的道長。 經(jīng)常有香客問我挺据,道長取具,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任扁耐,我火速辦了婚禮暇检,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘婉称。我一直安慰自己块仆,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布王暗。 她就那樣靜靜地躺著悔据,像睡著了一般。 火紅的嫁衣襯著肌膚如雪俗壹。 梳的紋絲不亂的頭發(fā)上科汗,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機與錄音绷雏,去河邊找鬼头滔。 笑死,一個胖子當(dāng)著我的面吹牛涎显,可吹牛的內(nèi)容都是我干的坤检。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼期吓,長吁一口氣:“原來是場噩夢啊……” “哼早歇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起讨勤,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤箭跳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后潭千,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衅码,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年脊岳,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡割捅,死狀恐怖奶躯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情亿驾,我是刑警寧澤嘹黔,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站莫瞬,受9級特大地震影響儡蔓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜疼邀,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一喂江、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧旁振,春花似錦获询、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蹬铺,卻和暖如春尝哆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背甜攀。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工秋泄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赴邻。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓印衔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親姥敛。 傳聞我的和親對象是個殘疾皇子奸焙,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

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

  • 淺拷貝只復(fù)制指向某個對象的引用,而不復(fù)制對象本身彤敛,新舊對象還是共享同一塊內(nèi)存与帆;但深拷貝會另外創(chuàng)造一個一模一樣的對象...
    悄敲閱讀 1,243評論 0 2
  • 深拷貝與淺拷貝的區(qū)別玄糟?如何實現(xiàn)一個深拷貝 在回答這個問題前,我們先來回顧一下JS中兩大數(shù)據(jù)類型 基本類型 Unde...
    憶當(dāng)年L閱讀 1,040評論 0 0
  • 深拷貝和淺拷貝是針對復(fù)雜數(shù)據(jù)類型來說的袄秩,淺拷貝只拷貝一層阵翎,而深拷貝是層層拷貝逢并。 代碼中理解... <!DOCTYP...
    果粒橙沒有粒閱讀 876評論 0 1
  • 前言:js如何實現(xiàn)一個深拷貝 這是一個老生常談的問題,也是在求職過程中的高頻面試題郭卫,考察的知識點十分豐富砍聊,本文將對...
    丶chlorine閱讀 399評論 0 2
  • 這是我第一次一個人坐在車?yán)锊辉富丶遥m然家里也只有我一個人贰军。有太多的事情玻蝌、太多的心情需要平復(fù)。 像夜里孤獨的...
    十九o閱讀 363評論 0 0