📅  最后修改于: 2023-12-03 15:24:31.736000             🧑  作者: Mango
在JavaScript中,对象是引用类型,复制一个对象时,如果直接使用赋值操作符,复制的只是指向对象内存地址的指针,两个变量指向同一个内存地址,修改其中一个变量的属性时,另一个变量的属性也会发生变化。为了避免这种情况,我们需要使用深度复制对象。
这种方法可以将对象转换为字符串,再将字符串转回对象,这样就能够得到深度复制的对象。但是这种方法有一些限制,不能复制函数、正则表达式、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));
这种方法可以复制所有数据类型的对象,通过递归实现深度复制。需要注意的是,递归的次数不能太多,否则会导致栈溢出。
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中深度复制对象的方法,根据具体场景选择合适的方法即可。