递归深拷贝
使用JSON.stringify()深拷贝的问题
1.对象中有时间类型的时候,序列化之后会变成字符串类型。
2.对象中有undefined和Function类型数据的时候,序列化之后会直接丢失。
3.对象中有NaN、Infinity和-Infinity的时候,序列化之后会显示null。
4.对象循环引用的时候,会直接报错。
5.最后,深拷贝建议使用递归,安全方便。
实现方法
// 更新博客 todo
// 递归深拷贝函数
// 可以全局使用也可以按需加载
const cloneDeep = (obj = {})=> {
// 变量制空
let newObj = null;
// 判断是否需要继续进行递归
if(typeof (obj) === 'object' && obj !==null){
newObj = obj instanceof Array ? []:{};
// 进行下一层递归克隆
for(let i in obj){
newObj[i] = cloneDeep(obj[i]);
}
}else{
// 如果不是对象直接赋值
newObj = obj;
}
return newObj
}
调用方法
const newObjs = cloneDeep(newObj);
newObj.InfinityMax = 20;
console.log(newObjs);
console.log(newObj);