实现深浅拷贝

浅拷贝是拷贝一层,深层次的引用类型,则共享内存地址,在JS中存在浅拷贝的现象有:

  • Object.assgin
  • Array.prototype.slice()
  • Array.prototype.concat()
  • 使用拓展运算符实现的复制
function shallowClone(obj){
  let res
  for(let key in obj){
  	if(obj.hasOwnProperty(key)){
		res[key]=obj[key]
	}
  }
  return res
}
function deepClone(obj) {  
  // 如果传进来的参数不是对象或者为null,则直接返回  
  if (typeof obj !== 'object' || obj === null) {  
    return obj;  
  }  
    
  let res;  
  if (Array.isArray(obj)) {  
    res = [];  
  } else {  
    res = {};  
  }  
    
  // 遍历对象的每个属性  
  for (let key in obj) {  
	//检查自有的属性
    if (obj.hasOwnProperty(key)) {  
      // 递归调用 deepClone 函数,对属性进行深度克隆  
      res[key] = deepClone(obj[key]);  
    }  
  }  
    
  // 返回克隆后的对象  
  return res;  
}

全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务