实现深拷贝
实现对象等多种格式的深度拷贝。
function deepclone(obj) {
if (typeof obj !== 'object') return obj;//不是一个对象是普通类型的值,直接返回
if (obj == null) return null;//是null,就返回null
if (obj instanceof Date) return new Date(obj);//是一个日期对象,就返回日期对象
if (obj instanceof RegExp) return new RegExp(obj);//是正则对象,就返回正则对象
let o = new obj.constructor();
for (let key in obj) {
o[key] = typeof obj[key] === 'object' ? deepclone(obj[key]) : obj[key];
//新克隆数组的o的key的值和需要克隆对象obj的key的值相对应,如果obj[key]的内容还是一个对象
//就继续递归调用克隆方法,否则就可以直接返回。
}
return o;
}
let o = { a: { a: 1 } }
let c = deepclone(o);
o.a.a = 2;
console.log(o, c)