Változók, típusok és referencia
JavaScript primitívek, objektumok, referencia és másolás: miért változik meg néha két változó egyszerre, és miért nem deep copy a spread?
Röviden
JavaScriptben a primitív értékek – például string, number, boolean, bigint, symbol, undefined és null – érték szerint viselkednek. Az objektum típusú értékeknél a változó egy objektumreferenciához kapcsolódik, ezért több binding ugyanarra az objektumra mutathat.
Mit jelent a változók, típusok és referencia?
JavaScriptben a primitív értékek – például string, number, boolean, bigint, symbol, undefined és null – érték szerint viselkednek. Az objektum típusú értékeknél a változó egy objektumreferenciához kapcsolódik, ezért több binding ugyanarra az objektumra mutathat.
Referenciák
01
binding A
02
↘
03
object
04
↗
05
binding B
Hogyan működik a gyakorlatban?
Amikor objektumot adsz át függvénynek, a referencia értéke másolódik. A függvény nem tudja átírni a hívó bindingját, de a közösen hivatkozott objektum belsejét módosíthatja. A spread `{...obj}` sekély másolatot készít: nested objektumok referenciája megmaradhat.
- Primitív újraértékadás nem módosít egy másik változót.
- Objektum property mutáció közös referencián látszik.
- Spread/shallow copy csak egy szintet másol.
- Immutability React state-nél különösen fontos a változások felismeréséhez.
Gyakorlati fejlesztői szemlélet
State update előtt rajzold fel, mely nested objektumok maradnak közös referencián. Ha immutábilis update kell, csak a megváltozó útvonal objektumait másold újra; ne mutáld a korábbi state-et.
Gyakori hibák és félreértések
- `const` objektumot teljesen immutable-nek gondolni.
- JSON stringify/parse-t univerzális deep clone-nak használni.
- Referenciális egyenlőséget tartalmi egyenlőségként értelmezni.
Források és szabványok
A technikai részletekhez elsődleges szabványokat és karbantartott hivatalos dokumentációt használok. Frameworkök, böngészők és webes API-k idővel változhatnak, ezért implementálás előtt mindig ellenőrizd az aktuális dokumentációt is.
Kapcsolódó ByBence Academy