淺拷貝
淺拷貝只複製指向某個對象的指針,而不復制對象本身,新舊對象還是共享同一塊內存,所以當一個對象發生變化時,另一個對象隨之改變
深拷貝
深拷貝會另外創造一個一模一樣的對象,新對象跟原對象不共享內存,修改新對象不會改到原對象;
實現深拷貝
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)