深度克隆

2018/12/12

JSON.parse(JSON.stringify(obj))

function deepClone(obj) {
  return JSON.parse(JSON.stringify(obj)) 
}

let arr = [
  1, 
  3, 
  {
    username: 'kobe'
  },
function(){}, /11/];
let arr4 = JSON.parse(JSON.stringify(arr));
console.log(arr, arr4)

[
    1,
    3,
    {
        "username": "kobe"
    },
    null,
    {}
]

缺点:正则就不再是正则(变为空对象) 和 得到的函数就不再是函数(变为null)了

    function deepClone(obj) {
      return JSON.parse(JSON.stringify(obj)) 
    }
    
  var obj = {a: undefined,b : function() {
      console.log(2)
    }};

  console.log(deepClone(obj))

对象深拷贝

判断是否为复杂类型

function deepClone(obj){
    let objClone = Array.isArray(obj)?[]:{};
    if(obj && typeof obj==="object"){
        for(key in obj){
            if(obj.hasOwnProperty(key)){
                if(obj[key]&&typeof obj[key] ==="object"){
                    objClone[key] = deepClone(obj[key]);
                }else{
                    objClone[key] = obj[key];
                }
            }
        }
    }
    return objClone;
}    

参考

clone deep