js的深拷貝

2021-10-22 17:33:13 字數 1146 閱讀 5248

// 深拷貝和淺拷貝的區別?如何實現?

// 深拷貝:拷貝後的結果 更改是不會影響拷貝前的 拷貝前後是沒有關係的

// 淺拷貝:改變前的內容,會對拷貝之後的有影響 拷貝前和拷貝後是有關係的

// 引用關係的問題

// ...運算子 只能拷貝一層 一層運算的時候是深拷貝,多層物件的時候是淺拷貝 典型的淺拷貝

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...