如何在JavaScript中正确克隆对象?Object.assign和展开运算符的问题
大家好!我是JavaScript新手,在复制对象时遇到了问题。
我有一个包含嵌套数据的 `user` 对象:
```javascript
const user = {
name: '伊万',
age: 30,
address: {
city: '莫斯科',
street: '特维尔大街',
coordinates: { lat: 55.76, lng: 37.62 }
},
hobbies: ['编程', '国际象棋']
};
```
我尝试创建这个对象的副本,但遇到了意外行为。当我使用 `Object.assign` 或展开运算符时,对嵌套对象的修改会影响原始对象:
```javascript
const clone1 = Object.assign({}, user);
const clone2 = { ...user };
clone1.address.city = '圣彼得堡';
console.log(user.address.city); // '圣彼得堡' — 原始对象也改变了!
clone2.hobbies.push('阅读');
console.log(user.hobbies); // ['编程', '国际象棋', '阅读'] — 又改变了!
```
我了解到这叫做“浅拷贝”。如何进行深拷贝?