1. 程式人生 > >ES 2021 來了,詳細解讀5個新特性,附案例

ES 2021 來了,詳細解讀5個新特性,附案例

ES 2021是世界上最受歡迎的程式語言的最新版本〜 本次迭代中包含了五個新特性,讓我們來一睹為快。 ## 1.全部替換`replaceAll`: js預設的`replace` 方法僅替換字串中一個模式的第一個例項,要全域性替換,你需要自己寫正則,因此2021帶來了全新的`replaceAll`方法。 ``` 'Hello'.replaceAll('l', 'L') // 'HeLLo' ``` ## 2。 `Promise.any` 這是Promise全域性物件的靜態方法,可以放Promise 陣列,只要有一個Promise完成解析,就短路返回一個值。如果所有的 promise 都被拒絕,那麼它將丟擲一個彙總錯誤訊息)。 示例:短路返回 ```javascript Promise.any([ new Promise((resolve, reject) => setTimeout(reject, 200, 'Third')), new Promise((resolve, reject) => setTimeout(resolve, 1000, 'Second')), new Promise((resolve, reject) => setTimeout(resolve, 2000, 'First')), ]) .then(value => console.log(`Result: ${value}`)) .catch (err => console.log(err)) /**** Output ****/ // Result: Second ``` 示例:錯誤處理 ```javascript Promise.any([ new Promise((resolve, reject) => setTimeout(reject, 200, 'Third')), new Promise((resolve, reject) => setTimeout(resolve, 1000, 'Second')), new Promise((resolve, reject) => setTimeout(resolve, 2000, 'First')), ]) .then(value => console.log(`Result: ${value}`)) .catch (err => console.log(err)) /**** Output ****/ // Result: Second ``` 如果您使用過`Promise.all`,則在何時解決和何時拒絕方面基本上是相反的。 ## 3  `WeakRef`弱引用 這是一個新類,用於建立對物件的弱引用,即不會阻止被引用物件被垃圾收集的引用,Java中有類似的實現。 ```javascript let obj = { name: "Andy" } const myRef = new WeakRef(obj) ``` 然後,您可以像這樣獲取包裝的物件: ``` myRef.deref() // { name: "Andy" } ``` 如果垃圾收集器已經將其從記憶體中刪除,它將返回`undefined`。 ## 4.邏輯運算子與賦值表示式 在 JavaScript 中有許多賦值運算子和邏輯運算子,例如: ```javascript // Assignment Operator Example let num = 5 num+=10 console.log(num) // 15 // Logical Operator Example let num1 = 6 let num2 = 3 console.log(num1 === 6 && num2 === 2) // false console.log(num1 === 6 || num2 === 2) // true ``` ES2021 讓我們將能把邏輯運算子和賦值運算子結合起來。 他們看起來像這樣: ```javascript a ||= b a &&= b a ??= b ``` 這裡解釋下第一個的工作原理,你基本上可以猜出其他兩個的工作原理。 ```javascript a ||= b // 等價於 // 1. a || (a = b) // 2. if (!a) a = b ``` 類似的`a &&= b`等價於`if(a) { a = b; }` `num1 ??= num2`等價於`num1 ?? (num1 = num2)` ## 5.數值分隔符 新引入的數值分隔符使用 _(下劃線)字元,在數值組之間提供分隔,使數值讀起來更容易。 看這個: ``` let num = 1000000000 ``` 是十億還是一億? 現在在ES 2021中,您可以改為編寫以下程式碼: ``` let num = 1_000_000_000 ``` 現在,這看起來像十億。 -------------------------- 感謝您的認真閱讀。 如果你覺得有幫助,歡迎點贊支援! 不定期分享軟體開發經驗,歡迎關注,一起交流軟體開發