Referencje do obiektów w JavaScript
Słownik kwalifikacji INF.04 - Projektowanie, programowanie i testowanie aplikacji
W JavaScript obiekty są przypisywane do zmiennych przez referencję, a nie przez utworzenie niezależnej kopii. Oznacza to, że zmienna nie przechowuje całego obiektu bezpośrednio, lecz odwołanie do miejsca w pamięci, gdzie ten obiekt się znajduje.
Przykład
let a = { value: 10 };
let b = a;
b.value = 20;
console.log(a.value);
W tym kodzie zmienna a wskazuje na obiekt { value: 10 }. Następnie b = a sprawia, że b wskazuje na ten sam obiekt, a nie na jego kopię. Gdy wykonujemy b.value = 20, zmieniamy właściwość obiektu wspólnego dla a i b. Dlatego console.log(a.value) wypisze 20.
Typy proste a obiekty
Typy proste, takie jak liczby, stringi czy wartości logiczne, są zwykle traktowane jak wartości:
let x = 10;
let y = x;
y = 20;
console.log(x); // 10
Zmiana y nie wpływa na x, bo y dostało kopię wartości.
Jak utworzyć kopię obiektu?
Płytką kopię można wykonać np. operatorem spread:
let a = { value: 10 };
let b = { ...a };
b.value = 20;
console.log(a.value); // 10
Trzeba jednak pamiętać, że przy obiektach zagnieżdżonych płytka kopia może nie wystarczyć.