最新的ECMAScript 2020規範已經通過資訊和電信標準組織Ecma國際批准。ECMAScript 2020加入了多種新功能,包括用來動態匯入模組的import()語法,還有能夠處理任意精度整數的BigInt,都是ECMAScript 2020的重點功能。ECMAScript是一種腳本語言規範,JavaScript則是ECMAScript的實作。

從ES 2015開始,JavaScript便進入滾動發行(Rolling Release)的新階段,盡管ECMAScript規範的新版本,需要經過提案、討論、批准和最終確認多個過程,但是與年度更新比較起來,各瀏覽器支援個別新功能的時間,通常早於規範釋出的時間,不過,ECMAScript 2020規範正式核准,仍然是一個重要的里程碑。

ECMAScript 2020最大的功能更新,可以說就是BigInt,這是JavaScript中第7個原語資料類型,這個資料類型可讓開發者使用一些非常大的整數,JavaScript原生Number能夠表示的最大值為2的53次方,而BigInt則可以表達大於2的53次方的數字,BigInt跟Number用法很相似,但仍有些許不同,BigInt不能被用在Math物件方法裡,也不能和Number混合計算,必須要先轉為同一個型態才行,且當BigInt被降轉成Number時,可能會遺失部分精度資訊。目前以Chromium為基礎的瀏覽器,還有Firefox都已經支援,Safari進度則落後。

新規範也納入了動態匯入,這是一個V8引擎在2017年就加入的功能,現在所有主流瀏覽器也都已經支援。標準匯入語法為靜態的,靜態匯入可能會大幅降低程式碼載入速度,而且可能大部分程式碼不會被用到,而且可能占用大量記憶體。

因此在ECMAScript 2020中提供動態匯入,類似函式形式的import()模組,只要使用動態指示符號,就能夠非同步載入模組,使import()表示式能夠載入模組,並且回傳包含模組所有內容的Promise物件,該物件在程式碼的任何位置都能被呼叫,動態匯入不只能夠與ES 2015的.then()方法一起使用,也能結合最新的async/await語法。

盡管動態匯入在部分情況可以解決靜態匯入的問題,但開發者仍需要謹慎使用,靜態匯入仍有其優點,其對於載入初始相依項目更可靠,且可經靜態分析和樹搖工具處理,能提高程式效能並移除不必要的程式碼。

無效值聯合運算子(Nullish Coalescing Operator)則是一個新的邏輯運算子,表示為??,當其左側運算元為null或是未定義時,則回傳右側運算元。??和邏輯OR運算子||相反,當左運算元不為null或是未定義時,就回傳左運算元,所以當需要考量除了null或是未定義之外的其他偽值,讓''以及0都可用時,則開發者便可選用無效值聯合運算子。

另外一個相似??的新運算子,稱為可選串連運算子,表示為?.,同樣是用來處理null或是未定義的無效值,不過可選串連運算子則是專門處理物件,過去在存取無效值屬性時會出現錯誤,但是當使用可選串連運算子,則僅會回傳null或是未定義值,也就是當要存取一個函式,但是該函式不存在,則會回傳未定義。

此外,ECMAScript 2020的字串加入了一個新的matchAll()方法,在while迴圈中使用g旗標,便可作為正規表示式方法RegExp.exec()的替代,該方法會回傳一個Iterator,裡面包含了所有配對成功的字串結果。

熱門新聞

Advertisement