手写js浅拷贝和深拷贝

20 阅读1分钟

浅拷贝:

function shallowCopy(obj){
 //1.判断obj是否是对象
 if(typeof obj !== 'object' || obj === null) return obj;
 //2.新建copyObj
 let copyObj = obj instanceof Array ? [] : {}
 //3.循环obj进行赋值操作
 for(let key in obj){
   if(obj.hasOwnProperty(key)){
     copyObj[key] = obj[key]
   }
 }
 return copyObj
}

深拷贝:

function deepCopy(obj){
 //1.判断obj是否是对象
 if(typeof obj !== 'object' || obj === null) return obj;
 //2.新建copyObj
 let copyObj = obj instanceof Array ? [] : {}
 //3.循环obj进行赋值操作
 for(let key in obj){
     if(obj.hasOwnProperty(key)){
        if(typeof obj[key] !== 'object' || obj[key] === null){
          copyObj[key] = obj[key]
        }else{
          copyObj[key] = deepCopy(obj[key])
        }
     }
 }
 return copyObj
}