ES9 - Yeni Özellikler
Burada ES9'daki yeni özellikleri öğreneceğiz. Eşzamansız üreteçleri anlayarak başlayalım.
Eşzamansız Üreteçler ve Yineleme
Eşzamansız üreteçler, asyncanahtar kelime. syntax bir eşzamansız oluşturucu tanımlamak için aşağıda verilmiştir -
async function* generator_name() {
//statements
}
Misal
Aşağıdaki örnek, bir next() jeneratör yöntemi.
<script>
async function* load(){
yield await Promise.resolve(1);
yield await Promise.resolve(2);
yield await Promise.resolve(3);
}
let l = load();
l.next().then(r=>console.log(r))
l.next().then(r=>console.log(r))
l.next().then(r=>console.log(r))
l.next().then(r=>console.log(r))
</script>
Yukarıdaki kodun çıktısı aşağıdaki gibi olacaktır -
{value: 1, done: false}
{value: 2, done: false}
{value: 3, done: false}
{value: undefined, done: true}
döngü beklemek için
Eşzamansız yinelemeler geleneksel yöntem kullanılarak yinelenemez. for..of loopsözdizimi vaatleri döndürürken. ES9,for await of loop desteklemek asynchronous iteration.
Kullanmak için sözdizimi for await of loop aşağıda verilmiştir, nerede,
Her yinelemede farklı bir özelliğin değeri atanır. variable ve bir değişken const, let veya var ile bildirilebilir.
- iterable - Yinelenebilir özellikleri üzerinde yinelenecek nesne.
for await (variable of iterable) {
statement
}
Misal
Aşağıdaki örnek, bir zaman uyumsuz oluşturucuyu yinelemek için for await of döngüsünün kullanımını gösterir.
<script>
async function* load(){
yield await Promise.resolve(1);
yield await Promise.resolve(2);
yield await Promise.resolve(3);
}
async function test(){
for await (const val of load()){
console.log(val)
}
}
test();
console.log('end of script')
</script>
Yukarıdaki kodun çıktısı aşağıda gösterildiği gibi olacaktır -
end of script
1
2
3
Misal
Aşağıdaki örnek, for await of döngüsünü kullanarak bir diziyi yineler.
<script>
async function fntest(){
for await (const val of [10,20,30,40]){
console.log(val)
}
}
fntest();
console.log('end of script')
</script>
Yukarıdaki kodun çıktısı aşağıdaki gibi olacaktır -
end of script
10
20
30
40
Dinlenme / Yayılma Özellikleri
ES9, Rest ve Spread operatörlerinin Objects ile kullanımını destekler.
Örnek: Nesne ve Dinlenme Operatörü
Aşağıdaki örnek, bir nesne ile rest operatörünün kullanımını gösterir. Öğrencinin yaş özelliğinin değeri yaş değişkenine kopyalanırken, kalan özelliklerin değerleri diğer değişkene rest sözdizimi `` ... '' kullanılarak kopyalanır.
<script>
const student = {
age:10,
height:5,
weight:50
}
const {age,...other} = student;
console.log(age)
console.log(other)
</script>
Yukarıdaki kodun çıktısı aşağıdaki gibi olacaktır -
10
{height: 5, weight: 50}
Örnek: Nesne ve Yayılma operatörü
Yayılma operatörü, birden çok nesneyi veya klonlama nesnelerini birleştirmek için kullanılabilir. Bu, aşağıdaki örnekte gösterilmektedir -
<script>
//spread operator
const obj1 = {a:10,b:20}
const obj2={c:30}
//clone obj1
const clone_obj={...obj1}
//combine obj1 and obj2
const obj3 = {...obj1,...obj2}
console.log(clone_obj)
console.log(obj3)
</script>
Yukarıdaki kodun çıktısı aşağıda belirtildiği gibi olacaktır -
{a: 10, b: 20}
{a: 10, b: 20, c: 30}
Söz: sonunda ()
finally()sonucuna bakılmaksızın, bir söz verildiğinde yerine getirilir. Bu işlev bir söz verir. Her iki taahhütte de kod tekrarını önlemek için kullanılabilir.then() ve catch() işleyiciler.
Sözdizimi
Aşağıda belirtilen sözdizimi işlev içindir finally().
promise.finally(function() {
});
promise.finally(()=> {
});
Misal
Aşağıdaki örnek, 3 saniyelik bir gecikmeden sonra pozitif bir sayının karesini döndüren zaman uyumsuz bir işlevi bildirir. Negatif bir sayı geçilirse işlev bir hata atar. Son bloğundaki ifadeler, söz ister reddedilsin ister çözülsün, her iki durumda da yürütülür.
<script>
let asyncSquareFn = function(n1){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
if(n1>=0){
resolve(n1*n1)
}
else reject('NOT_POSITIVE_NO')
},3000)
})
}
console.log('Start')
asyncSquareFn(10)//modify to add -10
.then(result=>{
console.log("result is",result)
}).catch(error=>console.log(error))
.finally(() =>{
console.log("inside finally")
console.log("executes all the time")
})
console.log("End");
</script>
Yukarıdaki kodun çıktısı aşağıda gösterildiği gibi olacaktır.
Start
End
//after 3 seconds
result is 100
inside finally
executes all the time
Şablon Değişmez revizyonu
ES7 itibariyle, etiketli şablonlar aşağıdaki kaçış dizilerinin kurallarına uygundur -
Unicode kaçış dizileri kullanılarak temsil edilir "\u", Örneğin \u2764\uFE0F
Unicode kod noktası kaçış dizileri kullanılarak temsil edilir "\u{}", Örneğin \u{2F}
Onaltılık kaçış dizileri kullanılarak temsil edilir "\x", Örneğin \xA8
Sekizli değişmez kaçış dizileri "" kullanılarak temsil edilir ve ardından bir veya daha fazla rakam gelir, örneğin \125
ES2016 ve önceki sürümlerinde, etiketli işlevlerle geçersiz kaçış dizileri kullanılırsa, aşağıda gösterildiği gibi bir Sözdizimi Hatası atılır -
//tagged function with an invalid unicode sequence
myTagFn`\unicode1`
// SyntaxError: malformed Unicode character escape sequence
Ancak, önceki sürümlerden farklı olarak, ES9 geçersiz unicode dizisini tanımsız olarak ayrıştırır ve bir hata vermez. Bu, aşağıdaki örnekte gösterilmektedir -
<script>
function myTagFn(str) {
return { "parsed": str[0] }
}
let result1 =myTagFn`\unicode1` //invalid unicode character
console.log(result1)
let result2 =myTagFn`\u2764\uFE0F`//valid unicode
console.log(result2)
</script>
Yukarıdaki kodun çıktısı aşağıda gösterildiği gibi olacaktır -
{parsed: undefined}
{parsed: "❤️"}
Ham Dizeler
ES9 özel bir özellik sunar rawetiket işlevinin ilk bağımsız değişkeninde bulunur. Bu özellik, kaçış dizilerini işlemeden ham dizelere girildikleri gibi erişmenizi sağlar.
Misal
<script>
function myTagFn(str) {
return { "Parsed": str[0], "Raw": str.raw[0] }
}
let result1 =myTagFn`\unicode`
console.log(result1)
let result2 =myTagFn`\u2764\uFE0F`
console.log(result2)
</script>
Yukarıdaki kodun çıktısı aşağıdaki gibi olacaktır -
{Parsed: undefined, Raw: "\unicode"}
{Parsed: "❤️", Raw: "\u2764\uFE0F"}
Normal İfade özelliği
Normal ifadelerde, nokta operatörü veya nokta tek bir karakterle eşleştirmek için kullanılır. . dot operator gibi satır sonu karakterlerini atlar \n, \r aşağıdaki örnekte gösterildiği gibi -
console.log(/Tutorials.Point/.test('Tutorials_Point')); //true
console.log(/Tutorials.Point/.test('Tutorials\nPoint')); //false
console.log(/Tutorials.Point/.test('Tutorials\rPoint')); //false
Normal bir ifade modeli / olarak temsil edilir regular_expression /.Test () yöntemi bir dize parametresi alır ve normal ifade kalıbını arar. Yukarıdaki örnekte,test() methodÖğreticilerle başlayıp ardından herhangi bir tek karakterin geldiği ve Nokta ile biten kalıbı arar. Eğer kullanırsak\n veya \r Tutorials ile Point arasındaki girdi dizesinde test () yöntemi false değerini döndürür.
true
false
false
ES9 yeni bir bayrak sunar - DotAllFlag (\s)satır sonlandırıcıları ve emojileri eşleştirmek için Regex ile birlikte kullanılabilir. Bu, aşağıdaki örnekte gösterilmektedir -
console.log(/Tutorials.Point/s.test('Tutorials\nPoint'));
console.log(/Tutorials.Point/s.test('Tutorials\rPoint'));
Yukarıdaki kodun çıktısı aşağıda belirtildiği gibi olacaktır -
true
true
Adlandırılmış Yakalama Grupları
ES9'dan önce, yakalama gruplarına dizinler aracılığıyla erişiliyordu. ES9, yakalama gruplarına adlar atamamıza izin verir. Aynı sözdizimi aşağıda verilmiştir -
(?<Name1>pattern1)
Misal
const birthDatePattern = /(?<myYear>[0-9]{4})-(?<myMonth>[0-9]{2})/;
const birthDate = birthDatePattern.exec('1999-04');
console.log(birthDate.groups.myYear);
console.log(birthDate.groups.myMonth);
Yukarıdaki kodun çıktısı aşağıda gösterildiği gibidir -
1999
04