1. 程式人生 > 其它 >ES12(2021)新特性: replaceAll、Promise.any、WeakRefs、數字分隔符、邏輯運算子和賦值表示式

ES12(2021)新特性: replaceAll、Promise.any、WeakRefs、數字分隔符、邏輯運算子和賦值表示式

1. replaceAll

返回一個全新的字串,所有符合匹配規則的字元都將被替換掉

conststr='helloworld';
str.replaceAll('l','');//"heoword"

2. Promise.any

Promise.any() 接收一個Promise可迭代物件,只要其中的一個 promise 成功,就返回那個已經成功的 promise 。如果可迭代物件中沒有一個 promise 成功(即所有的 promises 都失敗/拒絕),就返回一個失敗的 promise

constpromise1=newPromise((resolve,reject)=>reject('我是失敗的Promise_1'));
constpromise2=newPromise((resolve,reject)=>reject('我是失敗的Promise_2'));
constpromiseList=[promise1,promise2];
Promise.any(promiseList)
.then(values=>{
console.log(values);
})
.catch(e=>{
console.log(e);
});

3. WeakRefs

ES2021 了新的類WeakRefs。允許建立物件的弱引用。這樣就能夠在跟蹤現有物件時不會阻止對其進行垃圾回收。對於快取和物件對映非常有用。

必須用new關鍵字建立新的WeakRef,並把某些物件作為引數放入括號中。當你想讀取引用(被引用的物件)時,可以通過在弱引用上呼叫deref()來實現。

const myWeakRef = new WeakRef({
name: '星野',
year: '25'
})

myWeakRef.deref()
// => { name: '星野', year: '25' }

myWeakRef.deref().name
// => '星野'

與WeakRef緊密相連的還有另一個功能,名為finalizers或FinalizationRegistry。這個功能允許你註冊一個回撥函式,這個回撥函式將會在物件被垃圾回收時呼叫。

// 建立 FinalizationRegistry:
const reg = new FinalizationRegistry((val) => {
console.log(val)
})

(() => {
// 建立新物件:
const obj = {}

//為 “obj” 物件註冊 finalizer:
//第一個引數:要為其註冊 finalizer 的物件。
//第二個引數:上面定義的回撥函式的值。
reg.register(obj, 'obj has been garbage-collected.')
})()
// 當 "obj" 被垃圾回收時輸出:
// 'obj has be

https://www.tmojm.com 招商加盟網

4. 邏輯運算子和賦值表示式

邏輯運算子和賦值表示式,新特性結合了邏輯運算子(&&,||,??)和賦值表示式而JavaScript已存在的 複合賦值運算子有:

a||=b
//等價於
a=a||(a=b)

a&&=b
//等價於
a=a&&(a=b)

a??=b
//等價於
a=a??(a=b)

5. 數字分隔符

數字分隔符,可以在數字之間建立視覺化分隔符,通過_下劃線來分割數字,使數字更具可讀性

constmoney=1_000_000_000;
//等價於
constmoney=1000000000;

1_000_000_000===1000000000;//true