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


1. replaceAll

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

const str = 'hello world';
str.replaceAll('l', ''); // "heo word"

 

2. Promise.any

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

const promise1 = new Promise((resolve, reject) => reject('我是失敗的Promise_1'));
const promise2 = new Promise((resolve, reject) => reject('我是失敗的Promise_2'));
const promiseList = [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. 數字分隔符

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

const money = 1_000_000_000;
//等價於
const money = 1000000000;

1_000_000_000 === 1000000000; // true


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM