Conhecendo 또는 structuredClone

Mais um artigo da (quem sabe vire uma) 시리즈: "Conhecendo"! 😄 O tema da vez é um método muuuito útil que foi incorporado nos navegadores, o structuredClone.

Mas antes de falar dele, vamos entender um pouco sobre 얕은 복사 e 깊은 복사.


Pra começar, vamos criar um objeto e colocar alguns valores:

const objetoOriginal = {
    a: 'valor1',
    b: 'valor2',
    c: {
        d: 'valor3',
    }
};


Quando executamos esse código, o javascript vai armazenar esses valores em memória e vai criar uma referência a esse endereço de memória para que possamos alterar e acessar quando necessário.



Agora, se fizermos uma cópia simples (shallow copy), estaremos fazendo uma cópia dessa referenceência, e não do valor que está lá na memória.

Então quando fazemos isso:

const objetoNovo = objetoOriginal;


Por baixo dos panos o que vai acontecer é:


Isso acontece porque o shallow copy é, bem como o nome diz, apenas uma cópia superficial. Dessa forma, se alteramos algum valor no objetoNovo, essa alteração pode acabar refletindo no objetoOriginal e dependsendo da situação pode causar muitos problemas.

Já no deep copy a cópia é feita por completo, criando um novo endereço em memória para armazenar o novo objeto.



Dessa forma podemos alterar a cópia livremente, sem risco de causar algum efeito colateral indesejado.

Esse tipo de cópia costuma ser um pouco mais custosa, muitas vezes sendo feita manualmente ou utilizando alguma biblioteca externa, como o lodash .

Voltemos agora à nossa estrela de hoje: o structuredClone!

sintaxe do structuredClone é super simples. Basta passar qual a variável a ser copiada, e será retornado uma cópia completa do que foi passado. Mesmo se for um objeto complexo, com vários níveis, tudo será espelhado.

const objetoClone = structuredClone(objetoOriginal);


간단하게 아심! 🤩 Não precisamos nem importar nada.

Internamente, o structuredClone implementa um algoritmo de cópia recursiva, que também dá suporte a referências circulares.

Como paraâmetro, podemos passar quaaase qualquer tipo de variável. 복제할 수 있는 용맹한 경우에는 DataCloneError에 대한 오류가 있습니다.

Também temos um segundo paraâmetro opcional, que recebe uma lista e nos permite transferir valores. Fazendo com que passem a existir apenas na cópia e não mais no original.

Mas atenção: Não é qualquer que pode ser movido. Apenas objetos dos tipos chamados de Transferable podem ser passados ​​nesse paraâmetro, entram nessa lista os Buffers, Streams, etc... Mas isso é assunto pra um outro artigo 😉

구조화된 클론과 극단적인 도구를 사용하여 작업할 수 있습니다! Prático de usar, reduz dependsências, além de já ter bastante suporte entre os navegadores , então pode usar sem medo!

Quer ver mais a fundo sobre o structuredClone?



지금 구매하세요nessa página da MDN , ou veja diretamente aespecificação !


이 음성은 structuredClone과 일치합니까? Faz copias de alguma forma diferente? 감사합니다! 😁

좋은 웹페이지 즐겨찾기