js中的深克隆

155 阅读1分钟
  • 在下觉得深克隆就是让引用类型的value值从赋址变成赋值
let obj ={
    name:"xxxx",
    arr:[1]
}

function deepClone(data){
    let type = Object.prototype.toString.call(data)
    if(type!=='[object Array]'&&type!=='[object Object]') return null;
     let result = Array.isArray(data)?[]:{};
     for(let key in data){
         if(data.hasOwnProperty(key)){
             if(typeof data[key] === 'object'&&data[key]!==null){
                 result[key] = deepClone(data[key])
             }else{
                 result[key] = data [key]
             }
         }
     }
     return result
}
let arr = deepClone(obj)
arr.arr.push(2)
console.log(arr,obj);

当然有种简单的方法:JSON.parse(JSON.stringify());undefined、function、symbol 会被忽略;