对象的深浅拷贝

182 阅读1分钟

浅拷贝

  • 复制对象时,如果属性的值为引用类型时,只复制该属性的地址。

方法

  • Object.assign(target, ...sources)
  • 对象解构:{...obj}
  • let newArr = arr.concat(arr2)
  • let newArr = arr.slice(begin, end)

深拷贝

复制对象时,如果属性的值为引用类型时,需要生成一个新的对象。

方法

  • JSON.stringify 和 JSON.parse
  • 递归拷贝
function deepClone(obj) { 
  let cloneObj = {}
  for(let key in obj) {                 //遍历
    if(typeof obj[key] ==='object') { 
      cloneObj[key] = deepClone(obj[key])  //是对象就再次调用该函数递归
    } else {
      cloneObj[key] = obj[key]  //基本类型的话直接复制值
    }
  }
  return cloneObj
}