Quindi stavo giocando l'altro giorno solo per vedere esattamente come funziona l'assegnazione di massa in JavaScript.
Per prima cosa ho provato questo esempio nella console:
a = b = {};
a.foo = 'bar';
console.log(b.foo);
Il risultato è stato la "barra" visualizzata in un avviso. Questo è abbastanza giusto, ae in brealtà sono solo alias per lo stesso oggetto. Poi ho pensato, come avrei potuto rendere questo esempio più semplice.
a = b = 'foo';
a = 'bar';
console.log(b);
È più o meno la stessa cosa, non è vero? Ebbene, questa volta, ritorna foonon barcome mi sarei aspettato dal comportamento del primo esempio.
Perché succede questo?
NB Questo esempio potrebbe essere ulteriormente semplificato con il seguente codice:
a = {};
b = a;
a.foo = 'bar';
console.log(b.foo);
a = 'foo';
b = a;
a = 'bar';
console.log(b);
(Sospetto che JavaScript tratti le primitive come stringhe e interi in modo diverso dagli hash. Gli hash restituiscono un puntatore mentre le primitive "core" restituiscono una copia di se stesse)