Como clonar corretamente um objeto em JavaScript: cópia superficial e profunda
Olá a todos! Comecei a estudar JavaScript recentemente e me deparei com um problema que me deixou confuso. Quando atribuo um objeto a outro, eles de alguma forma ficam ligados. Ao modificar a cópia, também modifico o original. Aqui está um exemplo:
```javascript
let user = { name: "Ivan", age: 30 };
let clone = user;
clone.name = "Petr";
console.log(user.name); // Exibe "Petr", mas eu esperava "Ivan"
```
Entendo que em JavaScript os objetos são passados por referência, mas como faço para criar uma cópia realmente independente? Tentei usar `Object.assign()`, mas parece que ele também nem sempre funciona corretamente, especialmente se dentro do objeto houver outros objetos:
```javascript
let user = {
name: "Anna",
address: { city: "Moscou", street: "Tverskaya" }
};
let clone = Object.assign({}, user);
clone.address.city = "SPb";
console.log(user.address.city); // Exibe "SPb" — o original foi alterado novamente!
```
Existe alguma maneira de fazer uma cópia completa e profunda? Talvez existam métodos embutidos ou seja necessário escrever minha própria função?