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);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容