如何深拷贝

前几天阿里电话面的时候有问到如何进行深拷贝
这里总结一下

  • 第一种:借助JSON深拷贝
    思路是先把对象变成JSON字符串,再转化成对象
function JSONClone(obj){
  if(!(obj instanceof Object)){
    return obj
  }else{
    var obj2
    var str = JSON.stringify(obj)
    var obj2 = JSON.parse(str)
    }
  return obj2
}

var dem = JSONClone({a:2,c:3,v:{x:4}})
console.log(dem)

弊端是JSON不支持undefined,函数,引用,环....

  • 第二种:递归拷贝
 function clone(object){
     var object2
     if(! (object instanceof Object) ){
         return object
     }else if(object instanceof Array){
         object2 = []
     }else if(object instanceof Function){
         object2 = eval(object.toString())
     }else if(object instanceof Object){
         object2 = {}
     }
     for(let key in object){
         object2[key] = clone(object[key])
     }
     return object2
 }

var fun = clone(()=>{console.log(1)})
fun()  //1

这里并没有考虑到环的情况

你可能感兴趣的:(如何深拷贝)