J'ai donc été à jouer autour de l'autre jour, juste pour voir exactement comment la masse d'affectation fonctionne en JavaScript.
J'ai d'abord essayé cet exemple dans la console:
a = b = {};
a.foo = 'bar';
alert(b.foo);
Le résultat a été "bar" est affiché dans une alerte. C'est assez juste, a
et b
sont vraiment juste des alias pour le même objet. Puis j'ai pensé, comment pourrais-je faire de cet exemple simple.
a = b = 'foo';
a = 'bar';
alert(b);
C'est à peu près la même chose, n'est-ce pas? Eh bien cette fois, elle retourne foo
pas bar
que je m'attends à partir du comportement du premier exemple.
Pourquoi est-ce arrivé?
N. B. Cet exemple pourrait être simplifié encore plus avec le code suivant:
a = {};
b = a;
a.foo = 'bar';
alert(b.foo);
a = 'foo';
b = a;
a = 'bar';
alert(b);
(Je soupçonne que JavaScript traite primitives telles que des chaînes et des nombres entiers différemment pour les tables de hachage. Les hachages de retourner un pointeur alors que "de base" primitives retour une copie d'eux-mêmes)