JS 实现深拷贝、浅拷贝的几种方法

对象深拷贝

  • 第一种:使用递归的方法实现深拷贝

function deepClone(target) {
  let objClone = Array.isArray(target) ? [] : {}
  if(target && typeof target === 'Ojbect') {
    for(let key in target) {
      if(target[key] && typeof target[key] === 'Object') {
        objClone[key] = deepClone(target[key])  
      } else {
        objClone[key] = target[key]
      }
    }
  }
  return objClone
}

  • 第二种:使用JSON.parse()和JSON.stringify()
    JSON.parse(JSON.stringify(obj))
  • 第三种:使用Object.assign()
    Object.assign({},obj)
    注意:只能深拷贝对象的一级属性,二级属性之后即为浅拷贝

数组的深拷贝

  • 第一种:concat(arr1,arr2)
    \color{red} {注意:只有在数组元素都是简单类型的时候,是深拷贝;如果数组中有复杂类型,就会出事儿 }
  • 第二种:slice(idx1,idx2)
    ①没有参数的时候,是拷贝数组
    ②一个参数的时候,拷贝从起始位置到数组末尾的元素
    ③两个参数的时候,拷贝从起始位置到 结束位置的元素(不包含结束位置的元素,含头不含尾)

你可能感兴趣的:(JS 实现深拷贝、浅拷贝的几种方法)