// 深拷貝和淺拷貝的區別?如何實現?
// 深拷貝:拷貝後的結果 更改是不會影響拷貝前的 拷貝前後是沒有關係的
// 淺拷貝:改變前的內容,會對拷貝之後的有影響 拷貝前和拷貝後是有關係的
// 引用關係的問題
// ...運算子 只能拷貝一層 一層運算的時候是深拷貝,多層物件的時候是淺拷貝 典型的淺拷貝
let obj=
}let o=;
obj.name='hello';
obj.address.x=200;
console.log(obj===o,o);
let a=[1,2,3,4];
let arr=[a];
let newarr=arr.slice(); // 淺拷貝 拷貝的是引用的位址 拷貝前後是有關係的
newarr[0][0]=100;
console.log(arr);
// 深拷貝
let obj1=,
f:function(){}
}// 直接實現深拷貝 不完整,不能實現複雜的拷貝
let o1=json.parse(json.stringify(obj1));
obj1.address.x=200;
console.log(obj1,o1);
//實現乙個遞迴拷貝 怎麼去實現乙個深拷貝呢?
function deepclone(obj2,hash=new weakmap()) object.prototype.tostring.call(obj2)=[object array]?:{}
if(hash.get(obj2)) return hash.get(obj2);
let cloneobj=new obj2.constructor;
hash.set(obj2,cloneobj);
for(let key in obj2)
}return cloneobj;
}let obj3=};
obj3.o=obj3;
let d=deepclone(obj3);
obj3.address.x=200;
console.log(d);
// 如果物件複雜一點 迴圈引用
js 物件深拷貝 關於JS深拷貝的學習
看了好多文章講js深拷貝的,但是測試了一下,還有很多地方不完善的,結合別人的 和自己的理解,自己實現了乙個深拷貝。首先要考慮拷貝的目標物件是不是 null,因為 typeof null 結果是 object,如果是null就直接返回null。然後我們再判斷各種包裝物件,因為基本資料型別的包裝物件,n...
js深轉殖深拷貝
不足之處是不能拷貝函式,但是基本夠用 const deepcopy obj json parse json stringify obj 如果涉及拷貝函式 簡單一點 function copy object for const k,v of object.entries object return o...
js淺拷貝深拷貝
js淺拷貝深拷貝 對於想要複製的物件,如果物件裡面對應的值都是基本資料型別的,可以直接複製 也就是通過淺拷貝複製。如果對應的值有物件那麼淺拷貝是行不通的。會造成資料汙染。下面介紹淺拷貝與深拷貝實現方法。1.淺拷貝 let tem let copy for let key in tem 2.通過obj...