JavaScript dispensa apresentações, é uma linguagem robusta e com muita versatilidade, mas se você já trabalhou com ela, provavelmente já notou algum comportamento incomum. Uma delas é como o JavaScript lida com cópias de variáveis, principalmente ao trabalhar com objetos. Neste artigo, exploraremos o conceito de cópia profunda e como isso nos ajuda a evitar problemas inesperados ao duplicar dados em nossos programas.
Quando fazemos uma cópia de uma variável, o JavaScript cria um novo espaço de memória e armazena o valor copiado lá; então a nova variável aponta para este novo espaço de memória. Por exemplo:
x = 5; y = x;
y está apontando para um novo espaço de memória, que tem o mesmo valor que x, ou seja, 5 visualmente. seria algo assim:
O conceito acima se aplica apenas a valores primitivos, para objetos é diferente. Imagine que temos os dois objetos a seguir:
let a = { name: 'Rick', lastName: 'Sanchez', }; let b = a;
No exemplo acima, b não tem seu próprio espaço de memória como poderíamos esperar; em vez disso, a está apontando para o espaço de memória onde a está armazenado.
Que problemas esse comportamento pode causar? Basicamente, se você alterar qualquer campo de a ou b, ambas as variáveis serão alteradas. Execute o código a seguir e verifique você mesmo.
let a = { name: 'Rick', lastName: 'Sanchez', }; let b = a; b.name = 'Morty'; console.log('a: ', a); // a: { name: 'Morty', lastName: 'Sanchez' } console.log('b: ', b); // b: { name: 'Morty', lastName: 'Sanchez' }
A solução para isso? Precisamos fazer uma cópia profunda para salvar o valor de a em um novo espaço de memória independente para o qual b aponta.
const b = JSON.parse(JSON.stringify(a));
Desta forma, estamos forçando o JavaScript a criar um novo espaço de memória alterando o formato de Object para JSON. Isso é feito usando o método stringify, então o JSON com seu próprio espaço de memória é convertido novamente em um Objeto com o método parse, para que ambas as variáveis permaneçam totalmente independentes.
Esse comportamento estranho já aconteceu com você? Deixe-me saber nos comentários, ficarei feliz em ler você!
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3