使用 JS 实现 浅拷贝深拷贝

17 min read

使用 JavaScript 实现浅拷贝可以使用 Object.assign() 方法或者扩展运算符 ...,例如:

const shallowCopy = Object.assign({}, originalObject);
const shallowCopy = { ...originalObject };

实现深拷贝可以使用 JSON.parse(JSON.stringify(originalObject)),但是这种方法会忽略对象中的函数和 undefined。另一种方法是使用递归函数,例如:

function deepCopy(obj) {
  if (obj === null || typeof obj !== 'object') {
    return obj;
  }
  let copy;
  if (obj instanceof Array) {
    copy = [];
    for (let i = 0; i < obj.length; i++) {
      copy[i] = deepCopy(obj[i]);
    }
  } else {
    copy = {};
    for (const key in obj) {
      copy[key] = deepCopy(obj[key]);
    }
  }
  return copy;
}

const deepCopy = deepCopy(originalObject);