ECMAScript 2021 (ES12) ile Gelen Yeni Özellikler
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.
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.
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.
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)
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.
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.
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.
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.
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!
Kaynak
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_OR_assignment
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_AND_assignment
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_nullish_assignment
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAll
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/any
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakRef
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry