Teknik Detaylar

ES10 Nedir? ECMAScript 2019 Nedir?

← Teknik Detaylar
2021-10-19 ~ 2026-06-21 · 4 dk okuma
ES10 Nedir? ECMAScript 2019 Nedir?
Bu yazıyı yapay zekâ ile tartış
Sayfayı kopyala

💡 Özet (TL;DR):

  • ES10 (ES2019) Nedir?: Haziran 2019'da yayınlanan, JavaScript'e dizi düzleştirme (flat), nesne dönüştürme (Object.fromEntries) ve esnek hata yakalama gibi pratik metotlar kazandıran 10. ECMAScript sürümüdür.
  • Kritik Yenilikler: Array.prototype.flat() / flatMap(), Object.fromEntries(), trimStart() / trimEnd(), Symbol.prototype.description ve parametresiz catch bloğu.
  • Not: Makalede, ES10 özelliklerinin yanı sıra, o dönem taslak aşamasında olup bir sonraki yıl ES11 (ES2020) ile resmiyet kazanan BigInt, Dynamic Import ve globalThis yeniliklerine de yer verilmiştir.

ES10 (ECMAScript 2019), Haziran 2019'da yayınlanan 10. ECMAScript sürümüdür.


ES10 Özellikleri ve Pratik Kullanımları

ÖzellikES10 Öncesi WorkaroundES10 Modern Kullanım
Dizi DüzleştirmeÖzyinelemeli (recursive) fonksiyon yazmakarr.flat(depth)
Array'i Object'e Çevirmereduce veya döngü ile manuel eşlemeObject.fromEntries(entries)
Boşluk TemizlemeRegex kullanmak veya trim()str.trimStart() / trimEnd()
Catch Parametresicatch (error) (Kullanılmasa bile zorunlu)catch (Parametresiz / Optional binding)

ES10 ile Yeni Neler Geldi?

ES10 ile birlikte JavaScript'e aşağıdaki yenilikler geldi:

  • Array.prototype.flat()
  • Array.prototype.flatMap()
  • Object.fromEntries()
  • String.prototype.trimStart() ve trimEnd()
  • Function.prototype.toString() güncellemesi
  • İsteğe bağlı hata yakalama (Optional catch binding)
  • Symbol.prototype.description

⚠️ Tarihsel Not: Bu yazıda ayrıca, o dönem taslak aşamasında (Stage 4) olan ve bir sonraki yıl ES11 (ES2020) ile resmi standart haline gelen BigInt, Dynamic Import ve globalThis özelliklerine de değinilmiştir.


1. Array.prototype.flat()

flat() yöntemi, çok boyutlu veya iç içe geçmiş dizileri belirtilen derinliğe kadar düzleştirme (düz bir dizi haline getirme) işlemini gerçekleştirir. ES10 öncesinde bu işlem için özyinelemeli (recursive) fonksiyonlar yazmamız gerekirken, artık tek satırda yapabiliyoruz:

const arr = [1, 2, 3, [4, 5, 6, [7, 8, 9, [1, 2, 3]]]];

// 3 seviye derinliğe kadar düzleştir
console.log(arr.flat(3));
// Çıktı: [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3]

2. Array.prototype.flatMap()

flatMap(), bir dizinin elemanlarını standart map() fonksiyonuna benzer şekilde değiştirdikten sonra elde edilen sonuçları düz bir dizi halinde birleştirmek için kullanılır. Parametre olarak bir callback fonksiyonu alır. Sadece derinliği 1 olan diziler üzerinde etkilidir:

const arr = [1, 2, 3, 4];
console.log(arr.map(x => [x * 3]));    // [[3], [6], [9], [12]]
console.log(arr.flatMap(x => [x * 2])); // [2, 4, 6, 8]

3. Object.fromEntries()

ES8'de duyurulan Object.entries(), nesneleri anahtar-değer çiftlerinden oluşan dizilere dönüştürüyordu. ES10 ile gelen Object.fromEntries() ise bunun tam tersini yaparak, iki boyutlu anahtar-değer dizilerini tekrar bir nesneye (object) dönüştürür:

// Nesneyi diziye çevirme (ES8)
const student = { id: 1, name: "john" };
const studentArray = Object.entries(student); 
console.log(studentArray); // [ [ 'id', 1 ], [ 'name', 'john' ] ]

// Diziyi tekrar nesneye çevirme (ES10)
const newStudent = Object.fromEntries(studentArray); 
console.log(newStudent); // { id: 1, name: 'john' }

4. String.prototype.trimStart() ve trimEnd()

  • trimStart(): Bir metnin başındaki boşluk (whitespace) karakterlerini kaldırır. Diğer adı trimLeft()'tir.
  • trimEnd(): Bir metnin sonundaki boşluk karakterlerini kaldırır. Diğer adı trimRight()'tır.
const message = '    Merhaba Dünya!   ';
console.log(message.trimStart()); // "Merhaba Dünya!   "
console.log(message.trimEnd());   // "    Merhaba Dünya!"

5. Function.prototype.toString() Güncellemesi

ES10 öncesinde fonksiyonların toString() yöntemi, kaynak kodu boşluklar ve yorum satırları olmadan döndürebiliyordu. ES10 ile güncellenen toString(), yorum satırlarını, boşlukları ve yeni satır karakterlerini koruyarak fonksiyonun birebir yazıldığı kaynak kodu döndürür.

6. İsteğe Bağlı Hata Yakalama (Optional Catch Binding)

ES10 öncesinde try/catch bloklarında, yakalanan hata parametresini (error) kullanmasak dahi catch parantezinde belirtmek zorundaydık. Artık bu parametreyi tanımlamak isteğe bağlıdır:

// ES10 Öncesi
try {
  // Kod bloğu
} catch (error) {
  // error parametresi kullanılmasa bile yazılmalıydı
}

// ES10 ve Sonrası
try {
  // Kod bloğu
} catch {
  // Hata parametresine ihtiyaç duyulmayan durumlar
}

7. Symbol.prototype.description

ES10 ile birlikte sembollere (Symbol) eklenen salt okunur description özelliği sayesinde sembol oluşturulurken verilen açıklamayı doğrudan elde edebiliyoruz:

const symbol = Symbol("Bu bir semboldür");
console.log(symbol.toString());    // Symbol(Bu bir semboldür)
console.log(symbol.description);   // Bu bir semboldür

Sonraki Sürümle (ES11) Standartlaşan Özellikler

Aşağıdaki özellikler ES10 döneminde taslak aşamasındaydı ve resmi olarak ES11 (ES2020) sürümü ile standartlaşmıştır:

BigInt

JavaScript'te güvenle kullanılabilecek en büyük tam sayı Number.MAX_SAFE_INTEGER yani 9007199254740991 (2^53 - 1) değeridir. Bu değerin üzerine normal yollarla çıkıldığında matematiksel hassasiyet kaybolur. BigInt ise sınırsız büyüklükte tam sayılarla çalışabilmemizi sağlar:

let bigInt = BigInt(Number.MAX_SAFE_INTEGER);
bigInt++;
console.log(bigInt); // 9007199254740992n (Sondaki 'n' harfi BigInt olduğunu belirtir)

Dynamic Import

Modüllerin çalışma anında, koşula bağlı olarak asenkron bir şekilde dinamik olarak içeri aktarılmasını (import) sağlar:

let myModule;
const selectedModule = 1;

if (selectedModule === 1) {
  myModule = await import('./module1.js');
} else {
  myModule = await import('./module2.js');
}

globalThis

Tarayıcı ortamında global nesne window veya self iken Node.js ortamında global'dir. globalThis, kodun çalıştığı platformdan bağımsız olarak her zaman doğru global nesneye erişmemizi sağlayan standartlaştırılmış bir nesnedir.

Bu Yazıda Yapılan Değişiklikler
  • 21.06.2026: Dizi tanımlarındaki eksik virgül ve tanımsız değişken hataları içeren kod örnekleri düzeltildi. ES10 ve ES11 (BigInt, Dynamic Import, globalThis) ayrımı netleştirilerek teknik hatalar giderildi. Türkçe yazım hataları düzeltildi. Pratik karşılaştırma tablosu ve özet bloğu eklendi.
  • 11.05.2022: Yazı özeti düzenlendi.