Maison > interface Web > js tutoriel > Comprendre les références et la copie d'objets JavaScript - Brève explication

Comprendre les références et la copie d'objets JavaScript - Brève explication

Linda Hamilton
Libérer: 2024-12-22 02:07:21
original
256 Les gens l'ont consulté

Understand JavaScript Object References and Copying - Brief Explanation

Lorsque vous travaillez avec des objets en JavaScript, il est crucial de comprendre la différence entre les références d'objet et la copie d'objet. Voici un aperçu détaillé :


Références d'objets

  1. Les objets sont des types référence :
    • Lorsque vous affectez un objet à une variable, vous attribuez une référence à l'emplacement mémoire où l'objet est stocké, et non une copie de l'objet lui-même.
    • La modification de l'objet via une référence affecte toutes les références au même objet.
   let obj1 = { name: "Alice" };
   let obj2 = obj1; // obj2 now references the same object as obj1
   obj2.name = "Bob";
   console.log(obj1.name); // Output: "Bob"
Copier après la connexion
Copier après la connexion
  1. Contrôles d'égalité :
    • Deux variables sont égales si elles référencent le même objet en mémoire, pas si leur contenu est identique.
   let a = { key: "value" };
   let b = { key: "value" };
   console.log(a === b); // Output: false (different references)
   let c = a;
   console.log(a === c); // Output: true (same reference)
Copier après la connexion

Copie d'objet

Il existe deux principaux types de copie d'objets : la copie superficielle et la copie approfondie.

1. Copie superficielle

  • Une copie superficielle crée un nouvel objet, mais elle ne copie que le premier niveau de propriétés. Les objets ou tableaux imbriqués sont toujours référencés et non dupliqués.

Techniques de copie superficielle :

  • Object.assign() :

     let original = { name: "Alice", details: { age: 25 } };
     let copy = Object.assign({}, original);
     copy.details.age = 30;
     console.log(original.details.age); // Output: 30 (shared reference)
    
    Copier après la connexion
  • Opérateur de spread (...):

     let original = { name: "Alice", details: { age: 25 } };
     let copy = { ...original };
     copy.details.age = 30;
     console.log(original.details.age); // Output: 30 (shared reference)
    
    Copier après la connexion
  • Les deux méthodes créent une copie superficielle, ce qui signifie que les objets imbriqués sont toujours liés.

2. Copie approfondie

  • Une copie complète duplique l'intégralité de l'objet, y compris les structures imbriquées. Le nouvel objet est totalement indépendant de l'original.

Techniques de copie approfondie :

  • JSON.parse() et JSON.stringify() :

     let original = { name: "Alice", details: { age: 25 } };
     let copy = JSON.parse(JSON.stringify(original));
     copy.details.age = 30;
     console.log(original.details.age); // Output: 25
    
    Copier après la connexion
    • Limitation : Cette méthode ne gère pas les fonctions, non définies, Infinity ou les objets spéciaux comme Date ou RegExp.
  • StructuredClone() (JavaScript moderne) :

     let original = { name: "Alice", details: { age: 25 } };
     let copy = structuredClone(original);
     copy.details.age = 30;
     console.log(original.details.age); // Output: 25
    
    Copier après la connexion
    • Cette méthode gère la plupart des cas extrêmes (par exemple, les références circulaires) mais n'est pas prise en charge dans les environnements plus anciens.
  • Bibliothèques personnalisées :

    • Utilisez des bibliothèques comme lodash :
       let obj1 = { name: "Alice" };
       let obj2 = obj1; // obj2 now references the same object as obj1
       obj2.name = "Bob";
       console.log(obj1.name); // Output: "Bob"
    
    Copier après la connexion
    Copier après la connexion

Tableau récapitulatif

Action Result
Assignment (=) Creates a reference. Changes to one variable affect the other.
Shallow Copy Creates a new object but retains references for nested objects.
Deep Copy Creates a completely independent object, including nested structures.
Action

Résultat

ête> Affectation (=) Crée une référence. Les modifications apportées à une variable affectent l'autre. Copie superficielle Crée un nouvel objet mais conserve les références pour les objets imbriqués. Copie approfondie Crée un objet complètement indépendant, y compris des structures imbriquées.
Comprendre ces concepts vous aide à éviter les effets secondaires involontaires lorsque vous travaillez avec des objets en JavaScript !

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal