方法一 序列化与反序列化
let obj = { name: 'aaa' };
let objnew = JSON.parse(JSON.stringify(obj));
console.log(obj, objnew, obj === objnew);
方法二 递归
function deepClone(obj, hash = new WeakMap()) {
if (obj == null) return obj;
if (typeof obj !== 'object') return obj;
if (obj instanceof Date) return new Date(obj);
if (obj instanceof RegExp) return new RegExp(obj);
let val = hash.get(obj);
if (val) return val;
let cloneObj = new obj.constructor();
hash.set(obj, cloneObj);
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
cloneObj[key] = deepClone(obj[key], hash);
}
}
return cloneObj;
}
let obj = { name: '123', age: { a: 1 } }
obj.self = obj;
let obj1 = deepClone(obj);
console.log(obj, obj1, obj === obj1);
obj.age = 12;
console.log(obj, obj1, obj === obj1);