Shallow Copy dhidi ya Deep Copy katika JavaScript

JavaScript hushughulikia unakili kwa njia mbili kulingana na aina ya data.

Thamani za Msingi (Primitive Values) (Unakili kwa Thamani) Aina za msingi ni pamoja na strings, numbers, booleans, symbols, bigInt, na null. Unaponakili thamani ya msingi, JavaScript hutengeneza toleo jipya linalojitegemea kwenye kumbukumbu (memory).

Mfano: let a = 10; let b = a; b = 20; Matokeo: a inabaki kuwa 10.

Thamani zisizo za Msingi (Non-Primitive Values) (Unakili kwa Marejeo) Objects na arrays hufanya kazi tofauti. Hutumia marejeo (references). Unaponakili object, unanakili tu kiashiria (pointer) cha mahali kilipo kwenye kumbukumbu.

Mfano: let original = { name: "YOO" }; let copy = original; copy.name = "NEW"; Matokeo: original.name sasa ni "NEW".

Tofauti: Shallow dhidi ya Deep

Shallow copy hunakili kiwango cha juu cha object. Ikiwa object ina objects nyingine ndani yake (nested objects), bado itarejelea zile references za ndani za asili. Deep copy hutengeneza object mpya kabisa yenye thamani zote mpya.

Ifikirie kama pizza:

  • Shallow Copy: Wewe na rafiki yako mnashiriki pizza moja. Ikiwa rafiki yako atakula kipande, pizza itakuwa ndogo zaidi kwako pia.
  • Deep Copy: Ninyi nyote mna pizza zenu mbalimbali. Ikiwa rafiki yako atakula kipande, pizza yako itabaki vilevile.

Njia ya Shallow Copy Unaweza kutumia spread operator (...) kutengeneza shallow copy.

let original = { name: "YOO", details: { age: 22 } }; let copy = { ...original };

Onyo: Ikiwa utabadilisha original.details.age, copy.details.age pia itabadilika. Hii ndiyo mtego wa shallow copy.

Njia za Deep Copy

  1. structuredClone() Hii ni function iliyojengwa ndani (built-in) kwenye vivinjari vya kisasa na Node.js. Inashughulikia miundo iliyojificha ndani (nested structures) kwa ukamilifu.

Faida:

  • Ni ya haraka na ya asili (native).
  • Inashughulikia Dates, RegExp, na Maps.

Hasara:

  • Inafeli ikiwa object ina functions au DOM nodes.
  1. JSON.parse(JSON.stringify()) Hii ni mbinu ya zamani ambapo unageuza object kuwa string na kisha kuirudisha kuwa object.

Kwa nini uiepuke:

  • Inapoteza data kama undefined, Map, Set, au Infinity.
  • Inaweza kuharibu thamani fulani.

Chanzo: https://dev.to/yogesh_992/shallow-copy-vs-deep-copy-in-java-script-explained-in-easiest-way-3dg5