"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Copia superficial versus copia profunda en JavaScript

Copia superficial versus copia profunda en JavaScript

Publicado el 2024-08-19
Navegar:694

Shallow Copy vs Deep Copy in JavaScript

Cuando se trabaja con JavaScript, comprender la diferencia entre copia superficial y copia profunda es esencial para una manipulación eficaz de objetos y matrices. Profundicemos en lo que significan estos términos y cómo implementar cada tipo de copia en tu código.

Copia superficial
Una copia superficial crea un nuevo objeto o matriz que contiene los mismos valores que el original. Sin embargo, si el original contiene objetos o matrices anidados, la copia superficial solo copia las referencias a estas estructuras anidadas, no las estructuras en sí. Esto significa que los cambios en los objetos o matrices anidados en la estructura copiada también afectarán al original.

Ejemplos de métodos de copia superficial:

  1. Operador de propagación ({...})
const original = { a: 1, b: { c: 2 } };
const shallowCopy = { ...original };

Aquí, copia superficial es un objeto nuevo, pero copia superficial.b todavía hace referencia al mismo objeto que original.b.

2.Objeto.asignar()

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

Copia profunda
Una copia profunda crea un nuevo objeto o matriz que es un clon completo e independiente del original, incluidos todos los objetos y matrices anidados. Los cambios en la copia profunda no afectan el original y viceversa.

Ejemplos de métodos de copia profunda:

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

Este método serializa el objeto en una cadena JSON y luego lo analiza nuevamente en un nuevo objeto. Sin embargo, no maneja funciones, referencias circulares o indefinidas.

2.Función 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() (en entornos JavaScript modernos)
const deepCopy = structuredClone(original);

Cuándo usar cada uno

  • Copia superficial: Adecuado para objetos simples o matrices sin estructuras anidadas. Es más rápido y utiliza menos memoria. Úselo cuando necesite una copia rápida donde los cambios en los objetos anidados se reflejen tanto en el original como en la copia.

  • Copia profunda: Necesaria para objetos complejos o matrices con estructuras anidadas. Garantiza que los cambios en la copia no afecten al original. Úselo cuando necesite clones completamente independientes.

Comprender estas diferencias ayuda a prevenir errores que surgen de referencias compartidas no deseadas y garantiza la integridad de los datos en sus aplicaciones

Declaración de liberación Este artículo se reproduce en: https://dev.to/sagarj521/shallow-copy-vs-deep-copy-in-javascript-4dmo?1 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3