深拷贝和浅拷贝的区别
浅拷贝,指拷贝的就是内存地址 修改一个对象的属性,另外一个跟着改变
深拷贝开辟一个新的内存,两个对象属完全相同,但是对应两个不同的内存地址,修改一个对象的属性,不会改变另一个对象的属性
深拷贝的实现 使用递归实现
function deepClone(obj) {
// 首先判断拷贝的数据类型
if (typeof obj !== 'object' || obj === null) {
return obj; // 如果是基本数据类型或null,直接返回
}
// 创建一个新的目标对象或数组
const newObj = Array.isArray(obj) ? [] : {};
// 递归拷贝对象或数组的属性和元素
for (let key in obj) {
newObj[key] = deepClone(obj[key]);
}
return newObj;
}
演示代码:
let oldObj = {
name: 'John',
age: 30,
hobbies: ['reading', 'coding'],
address: {
street: '123 Main St',
city: 'New York',
country: 'USA'
}
};
let newObj = deepCopy(oldObj);
newObj.name = 'Mike';
newObj.hobbies.push('traveling');
newObj.address.city = 'San Francisco';
console.log(oldObj); // { name: 'John', age: 30, hobbies: [ 'reading', 'coding' ], address: { street: '123 Main St', city: 'New York', country: 'USA' } }
console.log(newObj); // { name: 'Mike', age: 30, hobbies: [ 'reading', 'coding', 'traveling' ], address: { street: '123 Main St', city: 'San Francisco', country: 'USA' } }