ECMAscript, kısa adıyla ES, Ecma-International tarafından ECMA-262 dokümanında yayınlanan ve her yıl yenilenen JavaScript standartıdır. Asıl amacı javascript için bir standart geliştirerek tüm tarayıcılarda çalışabilen kodlar yazılmasına olanak vermektir. (Ah neydi o Internet Explorer günleri, her browsera ayrı kod yazardık) Bununla birlikte Node.Js gibi sunucu tabanlı motorlarda ECMAScript’le uyum göstermektedir.

ES12 (ESCMAScript 2021) Haziran 2021’de yayınlanan 12. EcmaScript sürümüdür.

ES 12 ile gelen yenilikler

ES 12 ile birlikte tanımlanan yeni özellikler şunlar;

  • String.prototype.replaceAll()
  • Promise.any
  • WeakRef
  • &&=, ||= ve ??= operatörleri
  • Numeric separators

String.prototype.replaceAll()

replaceAll metodu inanılmaz büyük bir yenilik değil fakat sizi regular expressionlar kullanmaktan kurtaracak basit bir ekleme. İsminden de anlaşılabileceği gibi bu metot ile bir string içerisinde aradığınız bir alt stringi bulunduğu her konumda başka bir stringle değiştirebilirsiniz. Örnekle incelersek;

// Tüm x'leri e ile değiştirelim
// xvrxnbal evrenbal haline dönüşecektir.
'xvrxnbal'.replaceAll('x', 'e');

Promise.any

ES 12 ile birlikte yeni bir Promise metodu – Promise.any – geldi. Bu metod birden fazla pormise’i alıp, herhangi biri çözümlendiğinde çözümlenmiş kabul ediliyor. Örnekle incelersek;

try {

    // Promise.any metoduna array içerisinde birden fazla promise gönderiyoruz.
    const firstPromiseResolved = Promise.any(promisesArray);

    // promiselerden herhangi biri çözüldüğünde kodun bu bölümü çalışır
catch(e) {
   // hata oluşursa burası çalışacak
}

Promise.any() Promise’lerden hiç biri çözümlenmezse AggregateError hatası fırlatır. (Catch blogunda hatayı yakalayıp işlem yapabiliriz)

WeakRef

WeakRef, Weak References (zayıf referanslar) için bir kısa yol ve amacı diğer bir nesneye ait zayıf referans tutmak. Normalde başka bir nesnenin referans gösterdiği nesneler ‘garbage collector’ tarafından temizlenmezken, weakref tipinde bir referans varsa garbage collector bu referansı temizleyebiliyor. Zayıf bağlantı kurduğunuz bir nesne, varsa başka bir nesne ile güçlü bağlantısını kaybettikten sonra her a temizlenebilir (veya uzun süre temizlenmeden kalabilir.) Javascript motorlarının garbage collection algoritmaları farklı çalıştığından veya aynı motorun bir sonraki versiyonunda değişebileceğinden davranışın nasıl olacağını kestirmek son derece güçtür. Bu nedenle Ecma mümkünse WeakReference kullanımından kaçınmanızı öneriyor. Her şeye rağmen WeakRef kullanmak isterseniz şöyle kullanabilirsiniz;

const largeObject = new WeakRef({
     name: "CacheMechanism",
     type: "Cache",
});

largeObject.deref();
largeObject.deref().name;
largeObject.deref().type;

Mantıksal Atama Operatörleri (Logical Assignment Operators)

ES12 ile birlikte üç yeni mantıksal atama operatörü geldi, bunlar &&=, ||= ve ??= . Bu opereatörler sayesinde bir değişkene değer atarken mantıksal ifadeler kullanabiliyoruz. Örneklerle inceleyelim;

ES12 &&= Operatörü

let number1 = 10;
let number2 = 15;

number1 &&= number2;

Bu kodu bu operatör olmadan önce şöyle yazmamız gerekiyordu

let number1 = 10;
let number2 = 15;

if (number1) {
    number1 = number2
}

Özetle soldaki değişkenin değeri true döndürüyorsa, sağdaki değişkenin değerini soldakine atıyoruz.

ES12 ||= Operatörü

let number1 = null
let number2 = 15;

number1 ||= number2;

Bu kodu bu operatör olmadan önce şöyle yazmamız gerekiyordu

let number1 = null
let number2 = 15;

if (!number1) {
    number1 = number2
}

Bir önceki örneğin aksine, soldaki değişken false ise sağdaki değişkenin değerini soldaki değişkene atıyoruz.

ES12 ??= Operatörü

let number1 = null
let number2 = 15;

number1 ??= number2;

Bu kodu bu operatör olmadan önce şöyle yazmamız gerekiyordu

let number1 = null
let number2 = 15;

if (number1 == null || number1 == undefined) {
    number1 = number2
}

Bu operatör soldaki değişken null veya tanımsız ise sağdaki değişkenin değerini soldakine atıyor. Bir önceki operatörde kontrol yalnızca false değerine karşı çalışırken, bu operatörün sadece null veya undefined için çalıştığına dikkat edin.

Nümerik Ayraçlar (Numeric Separators)

Büyük sayılarla çalışmak genelde zordur. Kod içerisinde 123456789473 şeklinde bir sayı gördüğünüzde bunun büyüklüğünü algılamak zor olur. ES12 ile birlikte bu tarz büyük sayılar için ayraç kullanma şansına sahip olduk. Aynı sayıyı 123_456_789_473 şeklinde yazabiliyoruz. Böylece 123 milyar, 456 milyon ….. şeklinde bir sayıyla muhattap olduğumuzu anlamak çok daha kolay oluyor.

// ES12'den önce
const number = 123456789473;

// ES12'den sonra
const number = 123_456_789_473;
Bu Yazıda Yapılan Değişiklikler
  • 11.05.2022: Yazı özeti düzenlendi.