"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Cópia superficial versus cópia profunda em JavaScript

Cópia superficial versus cópia profunda em JavaScript

Publicado em 19/08/2024
Navegar:602

Shallow Copy vs Deep Copy in JavaScript

Ao trabalhar com JavaScript, entender a diferença entre cópia superficial e cópia profunda é essencial para a manipulação eficaz de objetos e matrizes. Vamos nos aprofundar no que esses termos significam e como implementar cada tipo de cópia em seu código.

Cópia superficial
Uma cópia superficial cria um novo objeto ou array que contém os mesmos valores do original. No entanto, se o original contiver objetos ou matrizes aninhados, a cópia superficial copiará apenas as referências a essas estruturas aninhadas, e não as próprias estruturas. Isso significa que alterações nos objetos aninhados ou matrizes na estrutura copiada também afetarão o original.

Exemplos de métodos de cópia superficial:

  1. Operador de propagação ({...})
const original = { a: 1, b: { c: 2 } };
const shallowCopy = { ...original };

Aqui, rasoCopy é um novo objeto, mas rasoCopy.b ainda faz referência ao mesmo objeto que original.b.

2.Object.assign()

const shallowCopy = Object.assign({}, original);
  1. Método de fatia de matriz
const originalArray = [1, 2, 3];
const shallowCopyArray = originalArray.slice();

Cópia profunda
Uma cópia profunda cria um novo objeto ou matriz que é um clone completo e independente do original, incluindo todos os objetos e matrizes aninhados. As alterações na cópia profunda não afetam o original e vice-versa.

Exemplos de métodos de cópia profunda:

  1. JSON.stringify() e JSON.parse()
const original = { a: 1, b: { c: 2 } };
const deepCopy = JSON.parse(JSON.stringify(original));

Este método serializa o objeto em uma string JSON e depois o analisa de volta em um novo objeto. No entanto, ele não lida com funções, referências indefinidas ou circulares.

2.Função recursiva

function deepCopy(obj) {
  if (obj === null || typeof obj !== 'object') return obj;

  const copy = Array.isArray(obj) ? [] : {};
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      copy[key] = deepCopy(obj[key]);
    }
  }
  return copy;
}

  1. StructuredClone() (em ambientes JavaScript modernos)
const deepCopy = structuredClone(original);

Quando usar cada

  • Cópia superficial: Adequado para objetos simples ou matrizes sem estruturas aninhadas. É mais rápido e usa menos memória. Use-o quando precisar de uma cópia rápida onde as alterações nos objetos aninhados devem refletir tanto no original quanto na cópia.

  • Deep Copy: Necessário para objetos complexos ou matrizes com estruturas aninhadas. Garante que as alterações na cópia não afetem o original. Use-o quando precisar de clones completamente independentes.

Compreender essas diferenças ajuda a evitar bugs que surgem de referências compartilhadas não intencionais e garante a integridade dos dados em seus aplicativos

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/sagarj521/shallow-copy-vs-deep-copy-in-javascript-4dmo?1 Se houver alguma violação, entre em contato com [email protected] para excluí-la
Tutorial mais recente Mais>

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