數(shù)組和對象深拷貝和淺拷貝

數(shù)組淺拷貝

1.原始循環(huán)放入新數(shù)組
2.arr.slice() 返回新數(shù)組
3.arr.concat() 返回新數(shù)組
4.[...arr] 擴展運算符
以上方法只能淺拷貝一維數(shù)組启具、(含對象的數(shù)組只能拷貝到對象的引用地址)

對象淺拷貝

淺拷貝之所以被稱為淺拷貝,是因為對象只會被克隆最外部的一層,至于更深層的對象,則依然是通過引用指向同一塊堆內(nèi)存.
[...obj] 擴展運算符 淺拷貝
Object.assign 是淺拷貝

var a={
  obj:{a:'name'}
}
var c=Object.assign({},a)
c.obj.a='name111';
console.log(a)    //{"obj":{"a":"name111"}}

深拷貝 數(shù)組珊泳、對象值包含引用類型值的時候

JSON.parse( JSON.stringify());
這種簡單粗暴的方法有其局限性鲁冯。當值為undefinedfunction色查、symbol 會在轉(zhuǎn)換過程中被忽略薯演。。秧了。所以跨扮,對象值有這三種的話用這種方法會導致屬性丟失。
存在的坑:
1.他無法實現(xiàn)對函數(shù) 验毡、RegExp等特殊對象的克隆
2.會拋棄對象的constructor,所有的構(gòu)造函數(shù)會指向Object
3.對象有循環(huán)引用,會報錯

var arr = ['old', 1, true, ['a1', 'a2'], {num: 1}]
var new_arr = JSON.parse( JSON.stringify(arr) );

手寫數(shù)組和對象 拷貝

淺拷貝

var shallowCopy = function(obj) {
    // 只拷貝對象
    if (typeof obj !== 'object') return obj;
    // 根據(jù)obj的類型判斷是新建一個數(shù)組還是對象
    var newObj = obj instanceof Array ? [] : {};
    // 遍歷obj衡创,并且判斷是obj的屬性才拷貝
    for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
            newObj[key] = obj[key];
        }
    }
    return newObj;
}

深拷貝方法
盡管使用深拷貝會完全的克隆一個新對象,不會產(chǎn)生副作用米罚,但是深拷貝因為使用遞歸钧汹,性能會不如淺拷貝丈探,在開發(fā)中录择,還是要根據(jù)實際情況進行選擇。

function deepCopy(obj) {
  if (typeof obj == "object") {
        //復雜數(shù)據(jù)類型
       var result= Array.isArray(obj) ? [] : {};
        for (let i in obj) {
            result[i] = typeof obj[i] == "object" ? deepCopy(obj[i]) : obj[i];
        }
        return result;
    } else {
        //簡單數(shù)據(jù)類型 直接賦值
        return obj;
    }
}
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末碗降,一起剝皮案震驚了整個濱河市隘竭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌讼渊,老刑警劉巖动看,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件菱皆,死亡現(xiàn)場離奇詭異仇轻,居然都是意外死亡,警方通過查閱死者的電腦和手機篷店,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門疲陕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人携茂,你說我怎么就攤上這事诅岩。” “怎么了医吊?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵卿堂,是天一觀的道長懒棉。 經(jīng)常有香客問我,道長策严,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任逛绵,我火速辦了婚禮倔韭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘胰苏。我一直安慰自己醇疼,他們只是感情好法焰,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布壶栋。 她就那樣靜靜地躺著贵试,像睡著了一般凯正。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上桑滩,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天运准,我揣著相機與錄音胁澳,去河邊找鬼米者。 笑死,一個胖子當著我的面吹牛胰丁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播喂分,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼锦庸,長吁一口氣:“原來是場噩夢啊……” “哼蒲祈!你這毒婦竟也來了甘萧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤幔嗦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后沥潭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嬉挡,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡钝鸽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年汇恤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拔恰。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖颜懊,靈堂內(nèi)的尸體忽然破棺而出河爹,到底是詐尸還是另有隱情匠璧,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布酿雪,位于F島的核電站,受9級特大地震影響指黎,放射性物質(zhì)發(fā)生泄漏袋励。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一当叭、第九天 我趴在偏房一處隱蔽的房頂上張望茬故。 院中可真熱鬧,春花似錦蚁鳖、人聲如沸询微。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至翩隧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宅静,已是汗流浹背痰催。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留己英,地道東北人间螟。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親厢破。 傳聞我的和親對象是個殘疾皇子荣瑟,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

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