📜  如何在javascript中深度复制对象(1)

📅  最后修改于: 2023-12-03 15:24:31.736000             🧑  作者: Mango

如何在JavaScript中深度复制对象

在JavaScript中,对象是引用类型,复制一个对象时,如果直接使用赋值操作符,复制的只是指向对象内存地址的指针,两个变量指向同一个内存地址,修改其中一个变量的属性时,另一个变量的属性也会发生变化。为了避免这种情况,我们需要使用深度复制对象。

1. 使用JSON.parse和JSON.stringify

这种方法可以将对象转换为字符串,再将字符串转回对象,这样就能够得到深度复制的对象。但是这种方法有一些限制,不能复制函数、正则表达式、Map、Set等数据类型。

const originObj = {
  name: 'Tom',
  age: 18,
  friends: ['Jim', 'Lily'],
  education: {
    highSchool: 'No.1 High School',
    university: 'Harvard'
  }
};

const copyObj = JSON.parse(JSON.stringify(originObj));
2. 使用递归函数

这种方法可以复制所有数据类型的对象,通过递归实现深度复制。需要注意的是,递归的次数不能太多,否则会导致栈溢出。

function deepClone(obj) {
  if (obj === null) return null;
  if (Array.isArray(obj)) return obj.map(deepClone);
  if (typeof obj === 'object') {
    const cloned = {};
    for (let key in obj) {
      cloned[key] = deepClone(obj[key]);
    }
    return cloned;
  }
  return obj;
}

const originObj = {
  name: 'Tom',
  age: 18,
  friends: ['Jim', 'Lily'],
  education: {
    highSchool: 'No.1 High School',
    university: 'Harvard'
  }
};

const copyObj = deepClone(originObj);
总结

在JavaScript中,深度复制对象是非常重要的,可以避免变量之间相互影响。以上就是两种在JavaScript中深度复制对象的方法,根据具体场景选择合适的方法即可。