JavaScript'te Derin Kopyalamanın Standart Yolu: structuredClone()

JavaScript'te Derin Kopyalamanın Standart Yolu: structuredClone()

JavaScript ekosisteminde nesneleri kopyalamak her zaman bir tartışma konusuydu. Yıllarca kullandığımız yöntemlerin her birinin ciddi yan etkileri vardı. structuredClone() bu kaosu sona erdiren yerleşik bir global fonksiyon olarak hayatımıza girdi.

Geleneksel Yöntemlerin Sorunu Neydi?

Bugüne kadar iki ana yol izliyorduk:

Spread Operatörü (...) ve Object.assign(): Sadece "yüzeysel" (shallow) kopyalama yapar. Nesne içindeki bir nesneye referans verir. İçteki nesneyi değiştirdiğinizde orijinal veri de bozulur.

JSON.parse(JSON.stringify()): Gerçek bir derin kopya oluşturur ama çok ağır bedelleri vardır. Date objelerini string'e çevirir, Map, Set, undefined ve Function gibi tipleri tamamen yok eder.

structuredClone() Neyi Farklı Yapıyor?

Bu fonksiyon, tarayıcının içindeki Structured Clone Algorithm'i kullanır. Bu sayede:

Karmaşık Veri Tipleri: Map, Set, Date, RegExp ve ArrayBuffer gibi yapıları hiçbir veri kaybı olmadan kopyalar.

Döngüsel Referanslar (Circular References): Bir nesnenin içinde kendisine bir referans varsa, klasik yöntemler hata verirken structuredClone() bunu akıllıca yönetir.

Transfer edilebilir nesneler: ArrayBuffer gibi büyük verileri kopyalamak yerine sahipliğini devrederek (transfer) performans kazanmanıza olanak tanır.

Kısıtlamalar: Fonksiyonlar (functions) ve DOM düğümleri kopyalanamaz. Bu tür veriler içeren bir nesneyi kopyalamaya çalışırsanız DataCloneError alırsınız.

Tarih: