Maison > interface Web > js tutoriel > Pourquoi les copies de tableaux JavaScript changent-elles lorsque l'original change ?

Pourquoi les copies de tableaux JavaScript changent-elles lorsque l'original change ?

Mary-Kate Olsen
Libérer: 2024-12-18 21:31:14
original
296 Les gens l'ont consulté

Why Do JavaScript Array Copies Change When the Original Changes?

Pourquoi la modification d'un tableau en JavaScript a-t-elle un impact sur les copies ?

En JavaScript, les tableaux sont des objets et les variables contiennent des références à ces objets plutôt que les objets eux-mêmes. Cet héritage peut conduire à un comportement inattendu lors de l'attribution de nouvelles valeurs aux tableaux.

Prenons l'exemple :

// Declare an array and its copy
var myArray = ['a', 'b', 'c'];
var copyOfMyArray = myArray;

// Modify the copy of the array
copyOfMyArray.splice(0, 1);

// Display the values
alert(myArray); // ['b', 'c']
alert(copyOfMyArray); // ['b', 'c']
Copier après la connexion

En manipulant copyOfMyArray, nous avons modifié par inadvertance myArray. En effet, des variables telles que myArray et copyOfMyArray pointent vers le même objet tableau sous-jacent.

Tableaux vs. Numbers

En revanche, lorsque vous travaillez avec des nombres comme myNumber et copyOfMyNumber, chaque variable contient une copie de la valeur elle-même. La modification de l'un n'affecte pas l'autre.

var myNumber = 5;
var copyOfMyNumber = myNumber;

// Decrement the copy of the number
copyOfMyNumber--;

// Display the values
alert(myNumber); // 5
alert(copyOfMyNumber); // 4
Copier après la connexion

Conséquences et solutions de contournement

Comprendre ce comportement est crucial pour une manipulation correcte des objets. Si vous avez vraiment besoin d'une copie distincte du tableau, utilisez la méthode slice pour créer une copie superficielle :

var copyOfMyArray = myArray.slice(0);
Copier après la connexion

Cependant, il convient de noter que cette copie superficielle ne fait que dupliquer les références du tableau à ses éléments. Tous les objets internes feront toujours référence aux mêmes instances d'origine.

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:php.cn
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