- JavaScript 2025'te de gelişmeye devam ediyor ve bazı özellikler çok bilinmese de son derece kullanışlı
- Yeni Iterator helper metodları, büyük ölçekli veri dönüşümlerinde çok daha bellek verimli çalışıyor
- Dizinin sonundan erişim sağlayan
at(), sadePromise.withResolvers()kullanımı, derin kopyalama içinstructuredClone()gibi özellikler öne çıkıyor - Set için küme işlemleri, template string tagging fonksiyonları ve WeakMap/WeakSet kullanım biçimleri hâlâ birçok geliştiricinin gözden kaçırdığı konular arasında
Iterator Helper metodları
- Mevcut
arr.filter().map()gibi zincirlemelerde her adımda yeni bir dizi oluşturulduğu için verimsizlik oluşur arr.values().drop(10).take(10).map(...).toArray()gibi iterator tabanlı zincirleme ile bu durum iyileştirilebilir- Başlıca metodlar:
drop(): ilk n öğeyi atlartake(): yalnızca ilk n öğeyi alırfilter(),map(),flatMap(): dizi metodlarına benzer şekilde çalışırreduce(),some(),every(),find(): koşul testleri ve birikimli hesaplamaları desteklertoArray(): sonucu diziye dönüştürür
- Safari desteği 31 Mart 2025 itibarıyla başladı, ancak henüz tüm tarayıcılar tarafından desteklenmiyor
Array at()
arr.at(n),arr[n]ile benzerdir ancak negatif indeksleme ile sondan erişim sağlar- Örnek:
[10, 20, 30].at(-1)→30 arr[arr.length - 1]gibi zahmetli bir kullanım olmadan son öğeye erişilebilir
Promise.withResolvers()
- Eski yaklaşım:
new Promise((resolve, reject) => { ... })içinderesolve/rejectdeğerlerini dışarıda saklamak - Artık:
const { promise, resolve, reject } = Promise.withResolvers()ile daha kısa ve sezgisel kullanım mümkün
String.replace() callback kullanımı
replace()vereplaceAll()için ikinci argüman yalnızca string değil, bir callback fonksiyonu da olabilir- Örnek:
"X, X, X".replaceAll("X", (match, i) => match + i)→"X0, X3, X6" - Tek seferde çeşitli değiştirmeler yapılabilir → performans ve bellek açısından verimli
Değişken takası (Swap)
- Eski yaklaşım:
tempdeğişkeni kullanmak - Daha kısa yöntem:
[a, b] = [b, a]ile array destructuring kullanarak değişkenleri takas etmek
structuredClone()
JSON.stringify()+JSON.parse()yerine daha doğru ve verimli derin kopyalama desteği sunar- Avantajları:
NaN,undefined,bigintgibi değerleri de destekler- Döngüsel referansları da güvenli biçimde kopyalar
- Büyük nesnelerde bellek ve hız açısından daha verimlidir
Tagged Template Literals
- Template string'ler belirli bir fonksiyonla parse edilebilir
- HTML escape işlemleri gibi dinamik string son işleme senaryolarında kullanışlıdır
- Örnek:
escapeHtmltag fonksiyonuyla<br> ${'<br>'}→<br> &lt;br&gt;
WeakMap / WeakSet
- Normal
Map,Setile benzerdir ancak:- Anahtar olarak yalnızca nesnelere izin verir (primitive değerler olmaz)
- GC hedefi olduğunda otomatik olarak kaldırılır
- Döngüsel referans ihtimali olduğunda veya yan etki oluşturmadan nesne metadata'sı saklamak istendiğinde uygundur
Set için küme işlemleri desteği
JavaScript'te Set nesnesi için çeşitli mantıksal işlemler yeni eklendi:
difference(): fark kümesi (A - B)intersection(): kesişim kümesi (A ∩ B)union(): birleşim kümesi (A ∪ B)symmetricDifference(): simetrik fark kümesi (A △ B)isDisjointFrom(): ortak öğe olup olmadığını kontrol ederisSubsetOf(): alt küme olup olmadığını kontrol ederisSupersetOf(): üst küme olup olmadığını kontrol eder
4 yorum
Literal parse edildiğinde değişkenlerin bile string olarak çıkması sorunu çözülmüş gibi görünüyor. Paylaşım için teşekkürler.
Örnek:
"X, X, X".replaceAll("X", (match, i) => match + i)→"X0, X1, X2"Örnek hatalı.
i, eşleşmenin bulunduğu konumu taşır.Bu nedenle sonuç değeri
"X0, X3, X6"olur.Aa, doğruymuş. Yapay zeka örneği yanlış üretmiş. Düzelttim. Keskin tespitiniz için teşekkürler!
values, Java Stream API gibi hissettirdiği için karşılaştırdım; dizi boyutu küçüksevaluesolmadanfilterkullanmak daha hızlı görünüyor. İteratör tabanlı olduğu için zincirleme arttıkça bir kezvaluesüzerinden geçme yöntemi daha hızlı olma etkisi de gösterebilir. Benchmark için https://jsperf.app/dixutu adresine bakabilirsiniz.