Maison >interface Web >js tutoriel >Quelle est la différence entre le passage par valeur et le passage par référence en JavaScript ?
Passage par référence et valeur en JavaScript
Lors du passage de données à des fonctions en JavaScript, il est crucial de comprendre la différence entre le passage par référence et passer par valeur. Cette distinction affecte la manière dont les données sont partagées et modifiées entre la fonction et l'appelant.
Pass by Value
Pour les types de données primitifs (chaînes, nombres, booléens), JavaScript passe toujours par valeur. Cela signifie qu'une copie de la valeur primitive est créée et transmise à la fonction. Toute modification apportée à la copie dans la fonction n'a aucun effet sur la variable d'origine en dehors de la fonction.
Passage par référence
Les objets (y compris les tableaux) sont passés par référence en JavaScript. Cela signifie que la fonction reçoit une référence à l'objet, pas une copie. Toute modification apportée aux propriétés de l'objet dans la fonction affectera l'objet d'origine en dehors de la fonction.
Exemples
Considérez la fonction suivante :
function f(a, b, c) { a = 3; b.push("foo"); c.first = false; }
Lorsqu'il est appelé avec les arguments suivants :
var x = 4; var y = ["eeny", "miny", "mo"]; var z = {first: true}; f(x, y, z);
La valeur de x reste inchangée car elle est passée par valeur. Le tableau y d'origine est directement modifié via l'opération push(), donc son contenu change. De même, la première propriété de z est modifiée, affectant l'objet d'origine.
Copie d'objet indépendante
Pour créer une copie totalement indépendante d'un objet, il est nécessaire d'utiliser une méthode qui crée un nouvel objet avec les mêmes valeurs de propriété mais aucune référence à l'original. Une approche courante consiste à utiliser la technique JSON.parse(JSON.stringify()) :
var newObject = JSON.parse(JSON.stringify(originalObject));
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!