Przejdź do głównej treści

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ć.