如何在JavaScript中正确克隆对象:浅拷贝与深拷贝
大家好!我刚开始学习JavaScript,遇到了一个让我困惑的问题。当我将一个对象赋值给另一个对象时,它们似乎被关联起来了。修改副本时,原对象也会被修改。例如:
```javascript
let user = { name: "Иван", age: 30 };
let clone = user;
clone.name = "Петр";
console.log(user.name); // 输出 "Петр",而我期望的是 "Иван"
```
我知道在JavaScript中对象是通过引用传递的,但如何制作一个真正独立的副本呢?我尝试过 `Object.assign()`,但似乎它并不总是正确工作,尤其是当对象内部包含其他对象时:
```javascript
let user = {
name: "Анна",
address: { city: "Москва", street: "Тверская" }
};
let clone = Object.assign({}, user);
clone.address.city = "СПб";
console.log(user.address.city); // 输出 "СПб" — 原对象又被修改了!
```
有没有办法进行完整的深拷贝?是否有内置方法,还是需要自己编写函数?