// JSON.parse(JSON.stringify()) 实现深拷贝时的问题:
//1.正则 变成 空对象
//2. BigInt 报错
//3.日期 转为字符串后就转不回来了
//4.Symbol/underfined/function 直接就没了
// bug:在对象的循环引用中出现死循环:把每一个克隆的对象和数组建立标示,后期递归的时候,处理过的则不再重复处理。
function cloneDeep(obj) {
//验证类型
if (obj === null) return null
if (typeof obj !== 'object') return obj
if (obj instanceof RegExp) return RegExp(obj)
if (obj instanceof Date) return new Date(obj)
// 对于对象和数组我们再进行循环克隆
let clone = new obj.constructor(); //相同类型的对象
Object.keys(obj).forEach(key => {
clone[key] = cloneDeep(obj[key]);
})
return clone;
}
var o={
a:'名字',
b:{
b1:'呵呵'
},
c:[1,2,3]
}
console.log(cloneDeep(o))
手写深拷贝js
最新推荐文章于 2022-12-08 18:20:26 发布