ECMAScript 2021 (ES12) ile Gelen Yeni Özellikler

Onur Şimşek
blutv
Published in
4 min readJul 2, 2021
ECMAScript 2021 (ES12)

Merhaba, bu yazıda ECMAScript 2021 (ES12) ile gelen yeni özelliklerden kod örnekleri ile birlikte bahsedeceğim.

ECMAScript 2021 yeni JavaScript özellikleri

  • Mantıksal atama operatörleri
    - Mantıksal VEYA (OR) atama operatörü (||=)
    - Mantıksal VE (AND) atama operatörü (&&=)
    - Mantıksal BOŞ (nullish) atama operatörü (??=)
  • Sayısal ayırıcılar (Numeric separators)
  • String.prototype.replaceAll
  • Promise.any
  • WeakRef
  • Finalizers (FinalizationRegistry)

Mantıksal Atama Operatörleri

Mantıksal atama operatörü, mantıksal işlemler ile atama işlemini birleştirir.

Mantıksal VEYA (OR) Atama Operatörü (||=)

Mantıksal atama operatörünün sol tarafında kalan kısım false ise atama işlemi gerçekleşir. Boş string, false, null, undefined, 0 gibi değerler false olarak değerlendirilir.

Logical OR assignment

Paylaşmış olduğum örnekte, person nesnesinin name property’si false olmadığından atama gerçekleşmeyecek ve console’da Onur değeri görülecektir. Fakat age property’si boş string olduğundan ve false olarak değerlendirildiğinden 26 değeri atanmış oldu.

Mantıksal VE (AND) Atama Operatörü (&&=)

Mantıksal atama operatörünün sol tarafında kalan kısım true ise atama işlemi gerçekleşecetir.

Logical AND assignment

Paylaşmış olduğum örnekte, person nesnesinin name property’si true olarak değerlendirildiğinden atama gerçekleşecek ve console’da John değeri görülecektir. Fakat age property’si boş string olduğundan ve false olarak değerlendirildiğinden değer ataması gerçekleşmeyecektir oldu.

Mantıksal BOŞ (nullish) Atama Operatörü (??=)

Mantıksal atama operatörünün sol tarafında kalan kısım null veya undefined ise atama işlemi gerçekleşecektir.

Logical nullish assignment

Paylaşmış olduğum örnekte, person nesnesinin name property’si null veya undefined olmadığı için atama gerçekleşmeyecek ve console’da Onur değeri görülecektir. Fakat age property’si olmadığından undefined olarak değerlendirilecek, değer ataması gerçekleşecektir ve console’da 26 değeri görülecektir.

Sayısal Ayırıcılar (Numeric Separators)

Bu özellik, sayısal değerlerin rahat okunabilmesi için basamakların alt çizgi ile ayrılmasına izin verir. Bütün sayı sistemlerinde kullanılabilir. (İkilik, sekizlik, onluk, onaltılık)

Numeric separators

String.prototype.replaceAll

replaceAll metodu, bir string üzerinde verilen modele göre bütün eşleşmelerin değiştirilmesini sağlar. Model string veya regex olabilir. Bu metottan önce böyle bir işlem yapmak için replace metodu kullanılırdı ve model olarak regex verilmesi gerekirdi. Önce replace metodunu kullanarak bir örnek yapalım. Daha sonra aynı örneği replaceAll metodu ile yapalım.

String.prototype.replace
String.prototype.replaceAll

Promise.any

Promise.any metodu, verilen promise’lerden ilk çözüleni döndürür, diğerlerinin çözülmesini beklemez. Promise.all metodunun tam tersidir. Verilen promise’lerden hiçbiri çözülmez ise AggregateError hatası döner.

Promise.any reject
Promise.any resolve

WeakRef

WeakRef, zayıf referans anlamına gelir ve bir nesneye zayıf referans vermemizi sağlar. Nesneye zayıf referans vermek, çöp toplayıcı (garbage collector) tarafından geri alınmasına izin verir. Böylelikle JavaScript motorunun çöp toplayıcısı nesneyi yok edebilir ve belleği geri alabilir.

NOT: WeakRef’i doğru kullanmak önemlidir ve mümkünse bunu kullanmamak en iyisidir. Çünkü çöp toplamanın ne zaman ve nasıl gerçekleşeceği JavaScript motoruna bağlıdır. Bir motorda gözlemlenen davranış, başka bir motorda, aynı motorun farklı bir versiyonunda, hatta aynı motorun aynı versiyonunda bile farklılık gösterebilir.

WeakRef

Paylaşmış olduğum örnekte görebileceğiniz gibi WeakRef değerine erişebilmek için deref() metodunu kullanmamız gerekir.

Finalizers (FinalizationRegistry)

FinalizationRegistry, kayıt defterinde kayıtlı bir nesne çöp toplayıcı (garbage collector) tarafından geri alındığında, geri arama (callback) isteğinde bulunmamızı sağlar.

Finalization Registry

Paylaşmış olduğum örnekte FinalizationRegistry ile bir kayıt defteri oluşturuyoruz. Daha sonra register metodunu person nesnesi ve person nesnesi çöp toplayıcı (garbage collector) tarafından geri alındığında kayıt defterine iletmek istediğimiz değeri parametre geçerek çağırıyoruz.

Sonuç

ECMAScript 2021 (ES12) ile birlikte gelen yeni JavaScript özelliklerini açıklamaya çalıştım. Daha fazla bilgi için finished proposal bağlantısına gidebilirsiniz.

Sonraki yazılarda görüşmek üzere!

--

--