Avatar ·

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?