ES2018核心改進:異步迭代、Promise.finally()、Rest/Spread屬性及正則表達式增強
ES2018(也稱ES9)為JavaScript帶來了多項重要更新,本文將通過示例講解這些新特性及其應用。
JavaScript標準(ECMAScript)持續演進,ES6(ECMAScript 2015)之後,新的年度發布流程加快了功能迭代。 ES2018是當時最新的版本。
TC39(技術委員會39)負責JavaScript提案的推進,流程如下:
ES2018主要特性:
1. 異步迭代:
在async/await
中,如果嘗試在同步循環內調用異步函數,例如:
<code class="language-javascript">async function process(array) { for (let i of array) { await doSomething(i); } }</code>
將無法正常工作。 ES2018引入了異步迭代器,其next()
方法返回一個Promise,允許使用for await ... of
循環串行執行異步操作:
<code class="language-javascript">async function process(array) { for await (let i of array) { doSomething(i); } }</code>
2. Promise.finally():
Promise.finally()
用於在Promise完成(無論成功或失敗)後執行相同的代碼,常用於清理工作:
<code class="language-javascript">function doSomething() { doSomething1() .then(doSomething2) .then(doSomething3) .catch(err => { console.log(err); }) .finally(() => { // 完成后的操作 }); }</code>
3. Rest/Spread屬性:
ES2018將Rest/Spread語法擴展到對象解構:
<code class="language-javascript">const myObject = { a: 1, b: 2, c: 3 }; const { a, ...x } = myObject; // a = 1, x = { b: 2, c: 3 } function restParam({ a, ...x }) { // a = 1, x = { b: 2, c: 3 } }</code>
Spread運算符用於創建對象的淺拷貝或合併對象:
<code class="language-javascript">const obj1 = { a: 1, b: 2 }; const obj2 = { ...obj1, c: 3 }; // obj2 = { a: 1, b: 2, c: 3 }</code>
4. 正則表達式增強:
(?<name>...)</name>
命名捕獲組,提高可讀性和維護性:<code class="language-javascript">const reDate = /(?<year>[0-9]{4})-(?<month>[0-9]{2})-(?<day>[0-9]{2})/;</day></month></year></code>
(?...<name>...)</name>
,匹配前面出現的模式。 s
(dotAll)標誌: .
匹配所有字符,包括換行符。 p{...}
和P{...}
訪問Unicode字符屬性。 ES2018常見問題解答:
Promise.finally()
、Rest/Spread屬性、正則表達式增強等。 希望以上信息對您有所幫助!
以上是ES2018中的新內容的詳細內容。更多資訊請關注PHP中文網其他相關文章!