Pewnego dnia bawiłem się więc tylko po to, aby zobaczyć dokładnie, jak działa przypisywanie masowe w JavaScript.
Najpierw wypróbowałem ten przykład w konsoli:
a = b = {};
a.foo = 'bar';
console.log(b.foo);
Rezultatem było wyświetlenie „słupka” w alercie. To jest w porządku ai btak naprawdę to tylko aliasy tego samego obiektu. Wtedy pomyślałem, jak mógłbym uprościć ten przykład.
a = b = 'foo';
a = 'bar';
console.log(b);
To prawie to samo, prawda? Cóż, tym razem nie wraca footak, barjak bym się spodziewał po zachowaniu pierwszego przykładu.
Dlaczego to się dzieje?
Uwaga Ten przykład można jeszcze bardziej uprościć za pomocą następującego kodu:
a = {};
b = a;
a.foo = 'bar';
console.log(b.foo);
a = 'foo';
b = a;
a = 'bar';
console.log(b);
(Podejrzewam, że JavaScript traktuje prymitywy, takie jak łańcuchy i liczby całkowite, inaczej niż skróty. Hashe zwracają wskaźnik, podczas gdy "podstawowe" prymitywy zwracają swoją kopię)