Je jouais donc l'autre jour pour voir exactement comment les affectations de masse fonctionnent en JavaScript.
J'ai d'abord essayé cet exemple dans la console:
a = b = {};
a.foo = 'bar';
console.log(b.foo);
Le résultat était une "barre" affichée dans une alerte. C'est assez juste, aet ce ne bsont en réalité que des alias du même objet. Puis j'ai pensé, comment pourrais-je rendre cet exemple plus simple.
a = b = 'foo';
a = 'bar';
console.log(b);
C'est à peu près la même chose, n'est-ce pas? Eh bien cette fois, il foone revient pas barcomme je l'attendrais du comportement du premier exemple.
Pourquoi cela arrive-t-il?
NB Cet exemple pourrait être encore plus simplifié avec le code suivant:
a = {};
b = a;
a.foo = 'bar';
console.log(b.foo);
a = 'foo';
b = a;
a = 'bar';
console.log(b);
(Je soupçonne que JavaScript traite les primitives telles que les chaînes et les entiers différemment des hachages. Les hachages renvoient un pointeur tandis que les primitives "principales" renvoient une copie d'elles-mêmes)