// 引用關係的問題
// ...運算子只能拷貝一層
// ... 第一層的時候是深拷貝,第二次的時候是淺拷貝。
let obj=};
let o=;
obj.name='hello';
console.log(obj,o);
let a=[1,2,4];
let arr=[a];
let newarr=arr.slice(); // 淺拷貝
newarr[0][0]=100;
console.log(arr);
let obj=,f:function(){}};
let o=json.parse(json.stringify(obj));
obj.address.x=200;
console.log(obj,o);
function deepclone(obj,hash=new weakmap()) object.prototype.tostring.call(obj)==[object array]?:{}
if(hash.get(obj)) return hash.get(obj);
let cloneobj=new obj.constructor;
hash.set(obj,cloneobj);
for(let key in obj)
}return cloneobj;
}let obj=}
let d=deepclone(obj);
obj.address.x=200;
console.log(d);
// 如果物件複雜一點 迴圈引用
java實現深轉殖 deep clone
轉殖就是複製乙個物件的複本.但乙個物件中可能有基本資料型別,如 int,long,float 等,也同時含有非基本資料型別如 陣列,集合等 被轉殖得到的物件基本型別的值修改了,原物件的值不會改變.這種適合shadow clone 淺轉殖 但如果你要改變乙個非基本型別的值時,原物件的值卻改變了,比如乙...
C 的深複製(Deep Clone)
public object clone 這裡借助序列化來實現深複製,因此別忘記給需要深複製的物件的類定義上面加上可序列化的標籤 serializable 最近在研究別人的unity rpg 遊戲框架的時候,發現別人程式的深複製又是另一種我沒有見過的寫法。現在提供一下他的思路,有時間我再來研究一下,把...
實現深拷貝
通過遞迴 型別判斷 function deepclone obj 如果obj是正規表示式 instanceof原理 判斷當前元素的 proto 是否有regexp.prototype if obj instanceof regexp 如果obj是日期格式 if obj instanceof date...