Javascript Structuredclone Vs JSON Deep Copy Map Set Date Circular
Definisi
structuredClone() (native, Node 17+/browser modern) membuat deep copy sejati yang mendukung Map, Set, Date, ArrayBuffer, dan reference siklik. JSON.parse(JSON.stringify()) hanya menangani data JSON murni (gagal pada Map/Set/Date/undefined/fungsi).
Kapan dipakai
Pakai structuredClone untuk menyalin state kompleks sebelum mutasi (agar original tidak berubah). Hindari JSON trick untuk data non-JSON — akan kehilangan tipe.
Cara kerja
structuredClone
const orig = { map: new Map([['a', 1]]), date: new Date(), nested: { x: 1 } };
const copy = structuredClone(orig);
copy.nested.x = 99;
console.log(orig.nested.x); // 1 (tak terpengaruh)JSON trick (terbatas)
const copy = JSON.parse(JSON.stringify({ a: 1, b: new Date() }));
// b jadi string ISO, bukan DateStruktur alur
Loading diagram...
Catatan implementasi
structuredClonemenangani circular reference;JSONakan throw.- Fungsi/prototype tidak disalin (structuredClone hanya data) — sama seperti JSON.
- Untuk partial clone, lebih baik buat objek baru secara eksplisit.
- Polyfill ada (@ungap/structured-clone) untuk environment tua.
Kesalahan umum
- JSON untuk Date/Map: tipe berubah diam-diam (bug halus).
- Mutasi copy mengira original aman: pastikan benar-benar deep (bukan reference).
- Clone besar sering: mahal; clone hanya bagian perlu.
- Menganggap fungsi ikut: structuredClone bukan untuk object dengan method.