Olá, Diego. Como vai?
Sensacional a sua iniciativa de ir além do conteúdo do vídeo e pesquisar sobre Deep Copy (cópia profunda). Essa curiosidade de entender o que acontece por baixo dos panos é o que diferencia um bom desenvolvedor no mercado de JavaScript.
A sua resolução ficou ótima e provou na prática o ponto principal: ambos os métodos conseguiram clonar o array com sucesso, permitindo que você adicionasse elementos na cópia ("Chuteira" e "Relógio") sem alterar o array original (pedidos).
Para agregar ainda mais valor ao seu aprendizado, vamos entender por que a sua decisão de usar o operador Spread ([...]) para este exercício foi a mais correta, e qual é o grande perigo de usar a técnica do JSON.parse(JSON.stringify()) no dia a dia.
Cópia Rasa (Shallow Copy) vs. Cópia Profunda (Deep Copy)
O operador Spread ([...]) faz uma Cópia Rasa. Isso significa que ele copia perfeitamente elementos que são tipos primitivos (como os textos "Jaqueta", "Tênis", etc.). Se o seu array é simples e plano, o Spread é a melhor escolha: é rápido, elegante e performático.
No entanto, se você tiver um array dentro de outro array ou um objeto aninhado (como o endereço no exemplo que você pesquisou), o Spread falha. Ele copia apenas a "superfície", e os objetos de dentro continuam apontando para o mesmo lugar na memória.
O perigo oculto do truque do JSON
A técnica de transformar tudo em texto com JSON.stringify() e depois reconstruir com JSON.parse() realmente resolve o problema de criar uma cópia 100% nova na memória (um Deep Copy). Porém, ela tem três grandes limitações técnicas que você precisa conhecer:
- Perda de Métodos e Funções: Se o seu objeto original tiver uma função dentro dele, essa função simplesmente desaparece após o processo do JSON, pois o formato JSON não aceita funções.
- Problema com Datas: Se houver um objeto do tipo
new Date() no seu array ou objeto, ele será convertido em uma string de texto puro. Você perde os métodos de data (como .getFullYear()). - Performance pesada: Para arrays ou objetos gigantes, esse processo de converter tudo para texto e depois ler o texto de volta consome muita memória e processamento.
Uma alternativa moderna: structuredClone()
Como esse truque do JSON era um quebra-galho muito comum, o próprio JavaScript evoluiu e criou uma função nativa e oficial para fazer Deep Copy sem nenhum desses problemas de perda de dados: o structuredClone().
Se você quiser fazer uma cópia profunda e segura hoje em dia, a boa prática é usar assim:
// Uma cópia profunda, nativa e segura no JavaScript moderno
let copiaProfundaSegura = structuredClone(pedidos);
copiaProfundaSegura.push("Relógio");
Parabéns pelos testes e por documentar os seus resultados com os console.log. Continue com essa mentalidade investigativa!
Espero que possa ter lhe ajudado!