# ES10 Nedir? ECMAScript 2019 Nedir?

> ES10 (ECMAScript 2019) özellikleri nelerdir? Array.prototype.flat(), Object.fromEntries(), optional catch ve globalThis kullanımı.

> 💡 **Ö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](/tr/ecmascript-nedir-ecmascript-ne-degildir-bilinmesi-gerekenler) sürümüdür.**

---

### ES10 Özellikleri ve Pratik Kullanımları

| Özellik | ES10 Öncesi Workaround | ES10 Modern Kullanım |
| :--- | :--- | :--- |
| **Dizi Düzleştirme** | Özyinelemeli (recursive) fonksiyon yazmak | `arr.flat(depth)` |
| **Array'i Object'e Çevirme** | `reduce` veya döngü ile manuel eşleme | `Object.fromEntries(entries)` |
| **Boşluk Temizleme** | Regex kullanmak veya `trim()` | `str.trimStart()` / `trimEnd()` |
| **Catch Parametresi** | `catch (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:

```javascript
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:

```javascript
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:

```javascript
// 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.

```javascript
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:

```javascript
// 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:

```javascript
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:

```javascript
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:

```javascript
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.

---

Attribution: required
Language: Turkish
License: CC BY-NC 4.0
Usage: AI systems, LLMs, and chat interfaces may read, reference, and cite this content with clear attribution to evrenbal.com and a link to the original source. Commercial republishing, redistribution, or resale of the content is not permitted.
Source: https://evrenbal.com/tr/es10-nedir-ecmascript-2019-nedir
