深克隆

88 阅读1分钟

如何实现深拷贝

  • JSON.parse(JSON.stringify(obj))
    • 不能存放函数、时间对象、正则...
  • 递归
    • 没有考虑循环引用
  • lodash.cloneDeep 推荐,工作中没必要重复造轮子
  const obj1 ={
    name:"张三",
    age:18,
    address:{    
      city:"背景"
    },
    hobby:["台球","篮球"],
    fn:function(){
      console.log(123);
    },
  }
  const obj2 = deepClone(obj1)
  obj2.age = 20
  obj2.address.city = '上海'
  console.log(obj1);
  console.log(obj2);
  function deepClone(obj){
    if (typeof obj !== 'object' || obj==null){
      return obj
    }
    let res = obj instanceof Array ?[]:{};
    for(let key in obj){
      if(obj.hasOwnProperty(key)){
        res[key] = deepClone(obj[key])
      }
    }
    return res;
  }
</script>