实现深拷贝的两种方法

171 阅读1分钟
1.  递归实现深拷贝(这个方法首先判断了要拷贝的对象是否为null或非对象类型,如果是,则直接返回该对象。否则,创建一个空对象或空数组,然后使用递归的方式拷贝对象的每个属性和子属性)
function deepClone(obj) {
  if (obj === null || typeof obj !== 'object') {
    return obj;
  }

  let clone = Array.isArray(obj) ? [] : {};

  for (let key in obj) {
    clone[key] = deepClone(obj[key]);
  }

  return clone;
}

2.  使用JSON序列化和反序列化实现深拷贝(这种方法的缺点是会忽略undefined、函数、Symbol等特殊类型的属性)

function deepClone(obj) { 
    return JSON.parse(JSON.stringify(obj)); 
}