手写一个实现深拷贝,这次彻底搞懂

82 阅读1分钟

深拷贝:假设我有一个对象A,我赋值给B,无论怎么改变B,A都不会发生任何的改变,即为深拷贝

浅拷贝:假设我有一个对象A,我赋值给B,改变一下B,A就会跟着改变,A,B对象的地址指向一个地方,只是简单的赋值,即为浅拷贝。

1、递归

function deepClone (obj) {
  const o = {}
  for (let i in obj) {
  
    if (typeof obj[i] === 'object') {
      o[i] = deepClone(obj[i])
    } else {
      o[i] = obj[i]
    }
    
  }

  return o
}

2、JSON.parse(JSON.stringify(obj))


例子:

const obj = {
  a: 1,
  b: 2,
  c: {
    d: 3
  }
}

const deepObj = deepClone(obj)

obj.a = 11

obj.c.d = 33

console.log('obj', obj) // {a: 11, b: 2, c: { d: 33 }}

console.log('deepObj', deepObj) // {a: 1, b: 2, c: { d: 3 }}

// 通过改变原对象,深拷贝的对象不受影响。

完成!!!