JS-深淺拷貝實現

淺拷貝

淺拷貝只複製指向某個對象的指針,而不復制對象本身,新舊對象還是共享同一塊內存,所以當一個對象發生變化時,另一個對象隨之改變

深拷貝

深拷貝會另外創造一個一模一樣的對象,新對象跟原對象不共享內存,修改新對象不會改到原對象;

實現深拷貝

function deeolone(scoure){
    if (typeof scoure !== "object") return scoure; //淺拷貝
    let target = scoure instanceof Array ? [] : {}; //深拷貝判斷是數組還是對象
    for (let key in scoure){ //循環判斷拷貝對象的子元素是否爲對象,不是則直接賦值,是遞歸調用
        target[key] = typeof scoure[key] === 'object' ? deeolone(scoure[key]) : scoure[key];
    }
    return target;
}

對象的深淺拷貝

//對象的淺拷貝
let obj = {a:1,b:2};
let easyobj = obj;
obj.a = 2;
console.log(easyobj.a);

在這裏插入圖片描述

//對象的深拷貝
let obj2 = {a:1, b:2, c: new Date()};
let deepObj = deeolone(obj2);
deepObj.a = 3;
console.log(obj2, deepObj);

在這裏插入圖片描述
數組的深淺拷貝

//數組的淺拷貝
let arr = [1,2,{a:2}];
let easyarr = arr;
easyarr[2].a = 3;
console.log(arr,easyarr);

在這裏插入圖片描述

let deeparr = deeolone(arr);
deeparr[2].a = 4;
console.log(arr,deeparr)

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章