递归深拷贝
使用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);

本文探讨了使用JSON.stringify()进行深拷贝时遇到的问题,包括时间类型转换、undefined和Function丢失、NaN和Infinity处理、循环引用错误,并提出了一种递归深拷贝的解决方案。通过示例代码展示了如何实现安全的深拷贝函数,以避免上述问题。
602

被折叠的 条评论
为什么被折叠?



