ES8 (ECMAScript 2017) Haziran 2017’de yayınlanan 8. ECMAScript sürümüdür.

ES8 ile yeni neler geldi ?

ES8 ile birlikte Javascript’e aşağıdaki yenilikler geldi?

  • string.protoype.padStart
  • string.prototype.padEnd
  • object.prototype.entries
  • object.prototype.values
  • object.getOwnPropertyDescriptors
  • trailing commas
  • asnyc/await

padStart()

padStart stringlerin başına istediğiniz karakteri belirli bir uzunluğa tamamlayacak şekilde ekliyor. padStart metodu iki parametre alıyor, ilki istenen uzunluk, ikincisi ise eklenecek string.

let amount='5';
console.log(amount.padStart(3,'0')) // 005

padEnd()

padStart’la benzer şekilde ve parametrelerle çalışan padEnd’in farkı belirtilen metni stringin sonuna ekliyor olması.

let str='abc';
console.str(amount.padStart(6,'.')) // abc...

Object.entries();

Object.entries() metodu kendisine verilen bir nesneyi, anahtar-değer ikilileri şeklinde array’lere dönüştürüyor.

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

ES10 ile birlikte gelen Object.fromEntires() metodu ise bunun tam tersini yapıyordu.

Object.getOwnPropertyDescriptors()

Bir nesnenin tüm nitelik tanımlayıcılarını içeren bir nesne döndürür. Eğer nesnenin herhangi bir tanımlı niteliği yoksa boş nesne döndürür.

const object1 = {
  property1: 42
};

const descriptors1 = Object.getOwnPropertyDescriptors(object1);

console.log(descriptors1.property1.writable);  // true
console.log(descriptors1.property1.value);     // 42
console.log(descriptors1);
// property1: {value: 42, writable: true, enumerable: true, configurable: true}

Object.values

Bir nesnenin anahtarları değil, sadece bir array olarak döndürür.

const colors= { B : 'Blue', OR : "Orange", YE : "Yellow", PI : "Pink" };
console.log( Object.values(colors) ); //(4) ['Blue', 'Orange', 'Yellow', 'Pink']

Trailing Commas

ES5’e kadar bir array ya da listenin sonundaki virgül hata veriyordu, bu durum ES5’de hata olmaktan çıksa da fonksiyon tanımları ve fonksiyon çağırılarında parametreleri virgülle bitiremiyorduk. ES8 ile birlikte fonksiyon tanımları ve çağrılarında da trailing comma kullanımının önü açılmış oldu;

function sendMessage(message, email1, email2, );

Async/Await

Eskiden çağırdığımız asenkron fonksiyonlarda belirli olaylar gerçekleştiğinde belirli işlemleri yapmak için callback fonksiyonları göndermek zorundaydık. ES8 ile birlikte gelen async/await fonksiyonları asenkron işlemler için çok daha kullanışlı ve temiz bir çözüm getirdi.

async function anahtarı kelimeleri ile tanımladığımız fonksiyonlar bir AsyncFunction nesnesi döndürürler. Bu şekilde tanımlanmış bir fonksiyon çağırıldığında da bir Promise döndürür. Bir asenkron fonksiyon değer döndüreceği zaman bu Promise çözülür (resolve). Eğer bir hata gerçekleşirse Promise reddedilir (reject).

Asenkron bir fonksiyon await tanımlaması içerebilir. Bu tanım fonksiyonu durdurur ve Promise’in yanıt döndürmesini bekler ve yanıtı alınca asenkron fonksiyonun çalışmasına devam edilir.

function resolveAfter2Seconds() {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve('çözüldü');
    }, 2000);
  });
}

// Fonksiyonu asenkron olarak tanımlıyoruz.
async function asyncCall() {
  console.log('promise'i çağırıyoruz');
  // Promise tamamlanıp değer döndürülene kadar duraklıyor ve değer dönünce result sabitine atıyor.
  const result = await resolveAfter2Seconds();
  console.log(result);
  // beklenen çıktı: "çözüldü"
}

asyncCall();

// Kaynak: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
Bu Yazıda Yapılan Değişiklikler
  • 11.05.2022: Yazı özeti düzenlendi.