la programmation

Comprendre la Copie par Référence en JavaScript

En JavaScript, la copie par référence (ou « passage par référence ») est un concept crucial à comprendre pour les développeurs. Lorsqu’un objet est passé en tant qu’argument à une fonction ou lorsqu’il est affecté à une variable, il est passé par référence, ce qui signifie que la variable ou le paramètre ne contient pas directement la valeur de l’objet, mais plutôt une référence à cet objet dans la mémoire.

Lorsqu’une variable contenant un objet est passée en tant qu’argument à une fonction ou lorsqu’elle est affectée à une autre variable, seule la référence à l’objet est copiée, et non l’objet lui-même. Cela signifie que toute modification apportée à l’objet via cette variable affectera également toutes les autres variables qui référencent le même objet.

Par exemple, considérons le code suivant :

javascript
let objetOriginal = { nom: "John", age: 30 }; let copie = objetOriginal; copie.age = 35; console.log(objetOriginal.age); // affiche 35

Dans cet exemple, la variable copie contient une référence à l’objet { nom: "John", age: 30 }, tout comme la variable objetOriginal. Lorsque nous modifions la propriété age de l’objet à travers la variable copie, cette modification est également reflétée dans l’objet référencé par objetOriginal.

Cela est dû au fait que copie et objetOriginal pointent tous deux vers la même instance de l’objet en mémoire.

Il est important de noter que cela ne s’applique pas aux types primitifs tels que les nombres, les chaînes de caractères, les booléens, etc. Lorsque vous affectez un type primitif à une variable ou que vous le passez en tant qu’argument à une fonction, une copie réelle de la valeur est effectuée. Par conséquent, les modifications apportées à la copie ne modifient pas la valeur d’origine.

Voici un exemple pour illustrer ce point :

javascript
let original = 10; let copie = original; copie = 20; console.log(original); // affiche 10

Dans ce cas, la modification de la variable copie n’affecte pas la variable original, car original contient une copie de la valeur primitive 10, et non une référence à un objet en mémoire.

En résumé, en JavaScript, les objets sont copiés par référence, ce qui signifie que lorsqu’ils sont affectés à une variable ou passés en tant qu’argument à une fonction, seule la référence à l’objet est copiée, pas l’objet lui-même. Cela entraîne des comportements différents par rapport aux types primitifs, qui sont copiés par valeur.

Plus de connaissances

En JavaScript, la copie par référence est un concept fondamental à comprendre pour les développeurs, car elle influence le comportement de leurs programmes, en particulier lors de la manipulation d’objets.

Lorsqu’un objet est créé en JavaScript, il est stocké en mémoire, et lorsqu’une variable est utilisée pour faire référence à cet objet, elle ne stocke pas l’objet lui-même, mais plutôt une référence à l’emplacement en mémoire où l’objet est stocké. Cela signifie que lorsqu’une variable contenant un objet est affectée à une autre variable ou passée en tant qu’argument à une fonction, seule la référence à l’emplacement mémoire de l’objet est copiée, et non l’objet lui-même.

Cette distinction est cruciale car elle peut entraîner des comportements inattendus si elle n’est pas comprise correctement. Lorsque vous effectuez une opération sur un objet à travers une variable qui le référence, cette opération affecte directement l’objet lui-même en mémoire. Par conséquent, si vous avez plusieurs variables qui référencent le même objet, toute modification apportée à cet objet à travers l’une de ces variables sera visible à travers les autres variables également, car elles pointent toutes vers le même emplacement mémoire.

Par exemple, considérons le cas suivant :

javascript
let voitureOriginale = { marque: "Toyota", modèle: "Corolla", année: 2020 }; let copieVoiture = voitureOriginale; copieVoiture.année = 2022; console.log(voitureOriginale.année); // affiche 2022

Dans cet exemple, voitureOriginale et copieVoiture font référence au même objet en mémoire. Lorsque nous modifions la propriété année de l’objet à travers copieVoiture, cette modification est également reflétée dans l’objet référencé par voitureOriginale.

Cependant, il existe des cas où vous pourriez avoir besoin de créer une copie indépendante d’un objet plutôt que de simplement copier sa référence. Cela peut être fait en utilisant différentes techniques, telles que la méthode Object.assign(), la syntaxe de décomposition (...), ou en utilisant des bibliothèques externes comme lodash.

Par exemple, avec Object.assign() :

javascript
let voitureOriginale = { marque: "Toyota", modèle: "Corolla", année: 2020 }; let copieVoiture = Object.assign({}, voitureOriginale); copieVoiture.année = 2022; console.log(voitureOriginale.année); // affiche 2020

Dans ce cas, une nouvelle objet est créé et les propriétés de voitureOriginale sont assignées à cette nouvelle objet. Ainsi, toute modification apportée à copieVoiture n’affecte pas l’objet d’origine.

En résumé, la copie par référence en JavaScript signifie que lorsqu’un objet est affecté à une variable ou passé en tant qu’argument à une fonction, seule sa référence en mémoire est copiée, ce qui signifie que toutes les variables qui référencent le même objet pointent vers le même emplacement en mémoire. Cela peut entraîner des comportements inattendus si cela n’est pas pris en compte lors de la manipulation des objets dans un programme JavaScript.

Bouton retour en haut de la page