J'ai écrit le JavaScript suivant :
var myArray = ['a', 'b', 'c'];
var copyOfMyArray = myArray;
copyOfMyArray.splice(0, 1);
alert(myArray); // alerts ['b','c']
alert(copyOfMyArray); // alerts ['b','c']
var myNumber = 5;
var copyOfMyNumber = myNumber;
copyOfMyNumber = copyOfMyNumber - 1;
alert(myNumber); // alerts 5
alert(copyOfMyNumber); // alerts 4
Ce code déclare une variable myArray
et lui attribue la valeur d'un tableau. Il déclare ensuite une deuxième variable copyOfMyArray
et lui attribue la valeur myArray
. Il effectue une opération sur copyOfMyArray
puis alerte les deux myArray
y copyOfMyArray
. D'une manière ou d'une autre, lorsque j'effectue une opération sur copyOfMyArray
il apparaît que la même opération est effectuée sur myArray
.
Le code fait ensuite la même chose avec une valeur numérique : Il déclare une variable myNumber
et lui attribue une valeur numérique. Il déclare ensuite une deuxième variable copyOfMyNumber
et lui attribue la valeur myNumber
. Il effectue une opération sur copyOfMyNumber
puis alerte les deux myNumber
y copyOfMyNumber
. Ici, j'obtiens le comportement attendu : différentes valeurs pour myNumber
y copyOfMyNumber
.
Quelle est la différence entre un tableau et un nombre en JavaScript ? Il semble que la modification d'un tableau change la valeur d'une copie du tableau, alors que la modification d'un nombre ne change pas la valeur d'une copie du nombre.
Je suppose que pour une raison quelconque, le tableau est désigné par une référence et le nombre par une valeur, mais pourquoi ? Comment puis-je savoir à quel comportement m'attendre avec d'autres objets ?