深拷贝函数 cloneDeep
作者:互联网
function cloneDeep (obj){
// 1.判断是否为null 或undefined
if (typeof obj == null ) return obj;
// 2.判断是否为日期Date
if (obj instanceof Date) return new Date(obj);
// 3.判断是否为正则 typeof /\d+/ === 'object'
if (obj instanceof RegExp) return new RegExp(obj);
// 4.如果不是数组或对象,返回该值
if (typeof obj !== 'object') return obj;
// 接下来,要么是对象,要么是数组 可以用 new obj.constructor得到它类型的空值
let cloneObj = new obj.constructor;
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
// 递归深拷贝
cloneObj[key] = cloneDeep(obj[key]);
}
}
return cloneObj;
}
let obj = {aa: {bb: 123}}
let cloneObj = cloneDeep(obj);
obj.aa.bb = 321;
console.log(obj);
console.log(cloneObj);
标签:return,函数,cloneObj,cloneDeep,key,new,obj,拷贝 来源: https://blog.csdn.net/weixin_43885779/article/details/121453145