使用js实现深拷贝
时间: 2023-07-19 20:05:28 浏览: 79
在 JavaScript 中,深拷贝指的是创建一个新的对象,并将原始对象和其所有嵌套的属性和子属性的值都复制到新对象中。可以使用递归函数来实现深拷贝。下面是一个简单的实现:
```javascript
function deepCopy(obj) {
// 如果是基本类型或者是 null,直接返回
if (typeof obj !== 'object' || obj === null) {
return obj;
}
// 根据 obj 的类型创建一个新的对象
let newObj = Array.isArray(obj) ? [] : {};
// 遍历 obj 的所有属性进行复制
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
newObj[key] = deepCopy(obj[key]);
}
}
return newObj;
}
```
使用示例:
```javascript
let obj1 = {
name: 'Tom',
age: 18,
hobbies: ['reading', 'music'],
address: {
province: 'Guangdong',
city: 'Shenzhen'
}
};
let obj2 = deepCopy(obj1);
obj2.name = 'Jerry';
obj2.hobbies.push('swimming');
obj2.address.city = 'Guangzhou';
console.log(obj1); // { name: 'Tom', age: 18, hobbies: [ 'reading', 'music' ], address: { province: 'Guangdong', city: 'Shenzhen' } }
console.log(obj2); // { name: 'Jerry', age: 18, hobbies: [ 'reading', 'music', 'swimming' ], address: { province: 'Guangdong', city: 'Guangzhou' } }
```
可以看到,obj2 是 obj1 的深拷贝,修改 obj2 的值不会影响到 obj1。
阅读全文