深拷贝和浅拷贝

91 阅读1分钟

深拷贝与浅拷贝区别

浅拷贝是引用同一个对象,如果对拷贝的对象进行数据更改,原数据也会一起改变,深拷贝是直接复制一整个数据,引用地址都不一样,不会影响原数据。

浅拷贝代码实现

// 使用Object.assign ,展开运算符进行浅拷贝
const obj = {a: 1}

// asssign方法,第一个参数是目标对象,剩下参数为原对象,会被合并到目标对象中
const obj2 = Object.assign(obj2, obj)
const obj3 = {...obj}

深拷贝代码实现

// 1、使用JSON.parse(JSON.stringfy)

// 2、递归实现
function deepCopy(arr) {
  // 先判断是否为基本类型
  if(typeof arr !== Object) {
    return arr
  }
  // 判断数组还是对象
  const copy = Array.isArray(arr) ? [] : {}

  for(let key in arr) {
    //只复制本身属性,不复制原型链上继承的属性
    if(Object.prototype.hasOwnProperty.call(arr, key)) {  
      copy[key] = deepCopy(arr[key]);  // 递归遍历所有属性
    }
  }
  return copy;
}