Maison > interface Web > js tutoriel > le corps du texte

Copie superficielle vs copie approfondie en JavaScript

WBOY
Libérer: 2024-07-26 20:45:00
original
765 Les gens l'ont consulté

Shallow Copy vs Deep Copy in JavaScript

Lorsque vous travaillez avec JavaScript, comprendre la différence entre la copie superficielle et la copie profonde est essentiel pour une manipulation efficace des objets et des tableaux. Voyons ce que signifient ces termes et comment implémenter chaque type de copie dans votre code.

Copie superficielle
Une copie superficielle crée un nouvel objet ou tableau contenant les mêmes valeurs que l'original. Toutefois, si l'original contient des objets ou des tableaux imbriqués, la copie superficielle copie uniquement les références à ces structures imbriquées, pas les structures elles-mêmes. Cela signifie que les modifications apportées aux objets ou aux tableaux imbriqués dans la structure copiée affecteront également l'original.

Exemples de méthodes de copie superficielle :

  1. Opérateur de spread ({...})
const original = { a: 1, b: { c: 2 } };
const shallowCopy = { ...original };
Copier après la connexion

Ici, ShallowCopy est un nouvel objet, mais ShallowCopy.b fait toujours référence au même objet que original.b.

2.Object.assign()

const shallowCopy = Object.assign({}, original);
Copier après la connexion
  1. Méthode de tranche de tableau
const originalArray = [1, 2, 3];
const shallowCopyArray = originalArray.slice();
Copier après la connexion

Copie approfondie
Une copie complète crée un nouvel objet ou tableau qui est un clone complet et indépendant de l'original, y compris tous les objets et tableaux imbriqués. Les modifications apportées à la copie complète n'affectent pas l'original et vice versa.

Exemples de méthodes de copie approfondie :

  1. JSON.stringify() et JSON.parse()
const original = { a: 1, b: { c: 2 } };
const deepCopy = JSON.parse(JSON.stringify(original));
Copier après la connexion

Cette méthode sérialise l'objet en une chaîne JSON, puis l'analyse en un nouvel objet. Cependant, il ne gère pas les fonctions, les références non définies ou circulaires.

2.Fonction récursive

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;
}

Copier après la connexion
  1. StructuredClone() (dans les environnements JavaScript modernes)
const deepCopy = structuredClone(original);
Copier après la connexion

Quand les utiliser

  • Copie superficielle : Convient aux objets simples ou aux tableaux sans structures imbriquées. C'est plus rapide et utilise moins de mémoire. Utilisez-le lorsque vous avez besoin d'une copie rapide où les modifications apportées aux objets imbriqués doivent être reflétées à la fois dans l'original et dans la copie.

  • Deep Copy : Nécessaire pour les objets complexes ou les tableaux avec des structures imbriquées. Cela garantit que les modifications apportées à la copie n’affectent pas l’original. Utilisez-le lorsque vous avez besoin de clones complètement indépendants.

Comprendre ces différences permet d'éviter les bugs résultant de références partagées involontaires et garantit l'intégrité des données dans vos applications

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal