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

ES 10 ile yeni neler geldi?

ES10 ile birlikte Javascript’e aşağıdaki yenilikler geldi.

  • BigInt
  • Dynamic import
  • Array.Flat()
  • Array.flatMap()
  • Object.fromEntries
  • String.trimStart()
  • String.trimEnd();
  • Function.prototype.toString
  • İsteğe bağlı hata yakalama / Optional catch binding
  • Symbol.prototype.description
  • Stantdartlaştırılmış globalThis nesnesi

BigInt

ES11’den önce Javascript’de kullanabileceğimiz en büyük integer 9007199254740991, yani 2^53-1 idi. Number.MAX_SAFE_INTEGER sabiti bize bu rakamı verirken, Number.MIN_SAFE_INTEGER sabiti de negatif olanını veriyor.

let oldLimit = Number.MAX_SAFE_INTEGER;
console.log(oldLimit)
// Ekrana 9007199254740991 değerini basar

oldLimit++
console.log(oldLimit)
// Ekrana tekrar 9007199254740991 değerini basar

ES11 ile gelen BigInt metodu ile bu değerin ötesine çıkabiliyoruz.

let bigInt = BigInt(Number.MAX_SAFE_INTEGER);
console.log(bigInt)
// Ekrana 9007199254740991 değerini basar

bigInt++
console.log(bigInt)
// Ekrana tekrar 9007199254740991n değerini basar

bigInt++
console.log(bigInt)
// Ekrana tekrar 9007199254740992n değerini basar

bigInt++
console.log(bigInt)
// Ekrana tekrar 9007199254740993n değerini basar

Dynamic Import

ES11 ile birlikte modüller dinamik olarak import ederek değişkenlere atayabiliyoruz.

let myModule;

let selectedModule = 1;

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

myModule.moduleMethod()

array.Flat

ES10 Array sınıfına iki yeni metod ekledi. Bunlar;

  • Array.prototype.flat
  • Array.prototype.flatMap

flat dizileri (array) düzleştirme işlemini gerçekleştiriyor. Bunu genelde çok boyutlu / iç içe geçmiş array’lerde kullanıyoruz. ES10’a kadar bu düzleştirme işlemi için recusion kullanmamız gerekiyordu, ES10’la birlikte bunu tek komut ve satırda yapabiliyoruz. flat metoduna kaçıncı seviye derinliğe kadar düzleştirme yapacağını da parametre olarak vermemiz gerekiyor.

var myArray = [ 1, 2, 3,
                [ 4, 5, 6,
                  [ 7, 8, 9
                    [ 1, 2, 3 ]
                  ]
                ]
              ]

console.log(arr.flat(3));

// Bu kodun çıktısı (12) [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3] olacaktır.                 

Yukarıdaki örnek kodu çalıştırdığımızda şu çıktıyı alırız (12) [1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3]. Yani array.flat metodu belirttiğimiz derinliğe kadar inip oradaki array elemanlarına üst kök seviyesine çıkartıyor.

array.flatMap()

flapMap bir arrayin elemanlarını map() fonksiyonuna benzer şekilde değiştirmek için kullanılıyor. Bu metot parametre olarak bir callback fonksiyonu alıyor ve dönen array’in nasıl düzleştirileceği bu callback fonksiyonu içerisinde tanımlanıyor. flatMap() sadece derinliği 1 olan array’lerde kullanılabiliyor.

let arr = [1, 2, 3, 4];
console.log(arr.map(x => [x * 3] ));
console.log(arr.flatMap(x => [x * 2]));
array.flatMap() nasıl kullanılır?

Object.fromEntries()

ES7’de duyurulan Object.entires metodu nesneleri array’e dönüştürmemizi sağlıyordu. ES 10 ile birlikte gelen Object.fromEntries() ise bunun tam tersini yapan, array olarak verilen anahtar:değer içeriklerini nesnelere dönüştürebilen bir fonksiyon.

const student = { id: 1, name:"john" };
const studentArray = Object.entries(myobject); 
console.log(studenArray); // Bu kodun çıktısı [ [ 'id', 1 ], [ 'name', 'john' ] ]
const studentArray= [ [ 'id', 1 ], [ 'name', 'john' ] ];
const student = Object.fromEntries(studentArray); 
console.log(student); // Bu kodun çıktısı ise {id: 1, name: 'john'} olacaktır.

String.trimStart()

trimStart() metodu bir stringing başındaki boşluk (whitespace) karakterlerini kaldıran bir metod. Metodun diğer adı ise trimLeft()

var message = '    Merhaba Dünya!   ';
console.log(message); // Bu kodun çıktısı "    Merhaba Dünya!   "
console.log(message.trimStart()); // Bu kodun çıktısı "Merhaba Dünya!   "

String.trimEnd()

trimEnd metodu trimStart() metodunun aksine baştaki değil sondaki boşluk karakterlerini kaldırıyor. Benzer şekilde bu metodun diğer adı da trimRight()

var message = '    Merhaba Dünya!   ';
console.log(message); // Bu kodun çıktısı "    Merhaba Dünya!   "
console.log(message.trimEnd()); // Bu kodun çıktısı "    Merhaba Dünya!"

Function.toString()

ES10’dan önce fonksiyonların toString() metodu kaynak kodu boşluklar, yorumlar, virgüller vs. olmadan geri döndürüyordu. ES10 ile birlikte geliştirilen toString metoduy yorumları, boşlukları ve yeni satırları dikkate alarak geri döndürüyor.

İsteğe bağlı hata yakalama / Optional catch binding

ES10’a kadar try / catch blogu uygulamalarında catch bloguna hata göndermemiz zorunluydu, bu ES10’dan sonra isteğe bağlı hale geldi.

try{

  // Birşeyler yapmayı dene
}
catch(error){
 //olmazsa bu hata blogunu çalıştır.
}
finally {
  // son olarak da bunu çalıştır
}

ES10 ile birlikte kodumuzu şu şekilde yazabiliyoruz

try {

} catch {

}

Symbol.Prototype.description

ES10’dan önce Symbol’lerin açıklamalarını doğrudan almak mümkün değildi. ES10 ile birlikte Symbol’lere eklenen yalnızca okunabilir (readonly) ‘description’ özelliği sayesinde Symbol açıklamasını doğrudan elde edebilir ve/veya toString ile dönen string gösterimini ayrıştırarak kullanabilirsiniz.

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

Semboller hakkında daha Selman Samet’in Medium’da paylaştığı Türkçe kaynağı okuyarak daha fazla bilgi sahibi olabilirsiniz.

globalThis

Eğer javascripti sadece Frontend tarafında kullanıyorsanız “window”, “self”, “frame” gibi globak değişkenler sizin için yeterli olacaktır. Eğer node.js kullanıyorsanız global nesnesi işinizi görecektir. Peki platform bağımsız çalışacak bir javascript kodu yazmak isterseniz ne olacak? globalThis ES 10’un bunun için getirdiği çözüm. globalThis tüm platformlarda az önce bahsedilen global nesnenin yerini tutuyor.

Bu Yazıda Yapılan Değişiklikler
  • 11.05.2022: Yazı özeti düzenlendi.