实现简单的深拷贝

107 阅读1分钟

实现深拷贝的思路:

  • 1.其中对象所拥有的属性可能是基本类型,也可能为引用类型
  • 2.若属性的值为基本数据类型,可能是number、boolean、string、null、undefined、Symbol,则可以直接用赋值操作来实现拷贝
  • 3.若属性的值为引用数据类型,可能是object、array、function,其中值为object或array时,需要用递归来实现拷贝
function deepClone (obj) {
 // 判断不是object或array时,直接返回原值进行赋值操作
  if (typeof obj !== 'object' || obj == null) {
    return obj
  }
  let res
  if (obj instanceof Array) {
    res = []
  } else {
    res = {}
  }
  for (let i in obj) {
   // 判断属性为对象本身的属性,而不是原型链上的属性
    if (obj.hasOwnProperty(i)) {
      res[i] = deepClone(obj[i])
    }
  }
  return res
}