Así que estuve jugando el otro día solo para ver exactamente cómo funciona la asignación masiva en JavaScript.
Primero probé este ejemplo en la consola:
a = b = {};
a.foo = 'bar';
console.log(b.foo);
El resultado fue que se mostraba una "barra" en una alerta. Eso es bastante justo, a
y en b
realidad son solo alias para el mismo objeto. Luego pensé, ¿cómo podría simplificar este ejemplo?
a = b = 'foo';
a = 'bar';
console.log(b);
Eso es más o menos lo mismo, ¿no? Bueno, esta vez, devuelve foo
no bar
lo que cabe esperar del comportamiento del primer ejemplo.
¿Por qué pasó esto?
NB Este ejemplo podría simplificarse aún más con el siguiente código:
a = {};
b = a;
a.foo = 'bar';
console.log(b.foo);
a = 'foo';
b = a;
a = 'bar';
console.log(b);
(Sospecho que JavaScript trata las primitivas como cadenas y enteros de manera diferente a los hash. Los hash devuelven un puntero mientras que las primitivas "centrales" devuelven una copia de sí mismas)
fuente