ES14 nedir? ECMAScript 2023 nedir?

Sayfayı kopyala
ECMAscript, kısa adıyla ES, Ecma-International tarafından ECMA-262 dokümanında yayınlanan ve her yıl yenilenen JavaScript standardıdır. Bu yazıda ECMAScript 2023 (ES14) sürümüyle gelen yenilikleri inceliyoruz.
ES14 (ECMAScript 2023), 2023 yılında yayınlanan 14. ECMAScript sürümüdür.
ES14 ile gelen yenilikler
ES14 ile birlikte tanımlanan yeni özellikler şunlar;
Array.prototype.findLast()vefindLastIndex()(Sondan arama metotları)- Change Array by Copy (
toSorted(),toReversed(),toSpliced(),with()) - Hashbang (
#!) desteği - Sembollerin (Symbols) WeakMap anahtarı olarak kullanılabilmesi
findLast() ve findLastIndex() Metotları
Dizilerde arama yaparken ilk eşleşen elemanı bulmak için find() ve findIndex() metotlarını kullanıyorduk. Ancak aramayı dizinin başından değil de sonundan başlatmak istediğimizde diziyi ters çevirmek (reverse()) gibi zahmetli ve performansı düşüren yollara başvuruyorduk. ES14 ile gelen findLast() ve findLastIndex() metotları bu sorunu doğrudan çözüyor.
const numbers = [5, 12, 50, 130, 44];
// Koşulu sağlayan dizideki SON elemanı bulalım
const lastLargeNumber = numbers.findLast(num => num > 45);
console.log(lastLargeNumber); // 130
// Koşulu sağlayan SON elemanın indeksini alalım
const lastLargeIndex = numbers.findLastIndex(num => num > 45);
console.log(lastLargeIndex); // 3
Change Array by Copy (Kopyalayarak Değiştirme Metotları)
JavaScript'te sort(), reverse() ve splice() gibi geleneksel dizi metotları, üzerinde çalıştıkları orijinal diziyi doğrudan mutasyona uğratır (değiştirir). Bu durum, özellikle reaktif kütüphanelerde (React, Vue vb.) beklenmedik hatalara neden olabiliyordu. ES14, dizinin orijinal halini bozmadan, değiştirilmiş yeni bir kopyasını dönen 4 yeni metot sunuyor:
toSorted(): Orijinal diziyi değiştirmeden sıralanmış yeni bir dizi döner.toReversed(): Orijinal diziyi değiştirmeden ters çevrilmiş yeni bir dizi döner.toSpliced(): Orijinal diziyi değiştirmeden eleman eklenmiş/silinmiş yeni bir dizi döner.with(index, value): Orijinal diziyi değiştirmeden, sadece belirtilen indeksteki elemanı güncellenmiş yeni bir dizi döner.
const originalArray = ['red', 'blue', 'green'];
// Orijinal diziyi bozmadan sıralayalım
const sortedArray = originalArray.toSorted();
console.log(originalArray); // ['red', 'blue', 'green'] (Değişmedi)
console.log(sortedArray); // ['blue', 'green', 'red'] (Sıralandı)
// Sadece 1. indeksteki elemanı güncelleyerek kopyasını alalım
const updatedArray = originalArray.with(1, 'yellow');
console.log(updatedArray); // ['red', 'yellow', 'green']
Hashbang (Shebang) Desteği
Sunucu tarafı veya CLI araçları geliştirirken, JavaScript dosyalarının doğrudan terminalden çalıştırılabilmesi için dosyanın en başına eklenen #!/usr/bin/env node (hashbang) satırı, artık ECMAScript standardının resmi bir parçası haline geldi. Böylece JavaScript motorları bu satırı yorumlarken hata fırlatmak yerine doğrudan pas geçiyor.
#!/usr/bin/env node
// Bu dosya artık doğrudan terminalden ./app.js şeklinde çalıştırılabilir.
console.log("CLI aracı başarıyla çalıştı!");
Sembollerin (Symbols) WeakMap Anahtarı Olarak Kullanımı
ES14 öncesinde, WeakMap anahtarları (keys) yalnızca nesneler (Objects) olabiliyordu. Semboller (Symbols) benzersiz olmalarına rağmen anahtar olarak kullanılamıyordu. Artık benzersiz sembolleri de WeakMap'lerde anahtar olarak konumlandırabiliyoruz.
const weakMap = new WeakMap();
const uniqueSymbol = Symbol('metaKey');
const metadata = { version: '1.0.0' };
weakMap.set(uniqueSymbol, metadata);
console.log(weakMap.get(uniqueSymbol)); // { version: '1.0.0' }
