即將到來(lái)的ECMAScript 2022
前言
ES2021 或 ES12 在今年夏天早些時(shí)候發(fā)布(具體的ES2021新特性,可以查看這里),現(xiàn)在我們來(lái)看看ES2022 會(huì)帶來(lái)什么有意思的新特性。
在本文中中將介紹并解釋在規(guī)范的最新草案中已被接受的提案。
?注:每個(gè)特性提案都遵循一個(gè)過(guò)程,在這個(gè)過(guò)程中,它經(jīng)歷了不同的階段,直到
?stage 4,這表明新增功能已準(zhǔn)備好包含在正式的ECMAScript 標(biāo)準(zhǔn)中,并將包含在最快的實(shí)用標(biāo)準(zhǔn)修訂版中。以下功能已經(jīng)完成,處于stage 4并已添加到ECMAScript 最新草案中。
聲明類的字段
?到目前為止,在ES規(guī)范中,類的字段定義和初始化是在類的構(gòu)造函數(shù)中完成的。但是在新的提案中,類字段可以在類的頂層被定義和初始化
?

私有方法和字段
?用
?#前綴來(lái)定義類的私有方法和字段。

類的靜態(tài)公共方法和字段
?在之前的類的字段和私有方法提案的基礎(chǔ)上,為JavaScript類增加了
?靜態(tài)公共字段、靜態(tài)私有方法和靜態(tài)私有字段的特性。

正則匹配索引
?該提案提供了一個(gè)新的
?/dflag,以獲得關(guān)于輸入字符串中每個(gè)匹配的開(kāi)始和索引位置結(jié)束的額外信息。
舉個(gè)例子:




?注:包含 begin,但不包含
?end
Top-level await
?頂層的await允許在異步函數(shù)之外使用
?await關(guān)鍵字。這個(gè)提案允許模塊當(dāng)做大型異步函數(shù),所以這些ECMAScript模塊可以等待資源加載,這樣其他導(dǎo)入這些模塊的模塊在開(kāi)始執(zhí)行自己的代碼之前也要等待資源加載完再去執(zhí)行

檢測(cè)私有字段
當(dāng)我們?cè)噲D訪問(wèn)一個(gè)沒(méi)有被聲明的公共字段時(shí),會(huì)得到未定義的結(jié)果,同時(shí)訪問(wèn)私有字段會(huì)拋出一個(gè)異常。我們根據(jù)這兩個(gè)行為來(lái)判斷是否含有公共字段和私有字段。但是這個(gè)建議引入了一個(gè)更有趣的解決方案,它包括使用in操作符,如果指定的屬性/字段在指定的對(duì)象/類中,則返回真,并且也能判斷私有字段

在所有內(nèi)置的可索引數(shù)據(jù)上新增.at()方法
新增一個(gè)新的數(shù)組方法,通過(guò)給定的索引來(lái)獲取一個(gè)元素。當(dāng)給定的索引為正數(shù)時(shí),這個(gè)新方法的行為與使用括號(hào)符號(hào)的訪問(wèn)相同,但是當(dāng)我們給定一個(gè)負(fù)整數(shù)的索引時(shí),它就像python的 "負(fù)數(shù)索引 "一樣工作,這意味著at()方法以負(fù)整數(shù)為索引,從數(shù)組的最后一項(xiàng)往后數(shù)。所以該方法可以被執(zhí)行為array.at(-1),它的行為與array[array.length-1]相同,在下面的例子中可以看到

Object.hasOwn(object, property)
簡(jiǎn)單講就是使用Object.hasOwn來(lái)替代Object.prototype.hasOwnProperty.call(太長(zhǎng)了,不好看)

ECMAScript類靜態(tài)初始化塊
類靜態(tài)塊提議提供了一種優(yōu)雅的方式,在類聲明/定義期間評(píng)估靜態(tài)初始化代碼塊,可以訪問(wèn)類的私有字段

?注:Typescript4.4也做了支持
?
參考文獻(xiàn)
https://github.com/tc39/proposals/blob/master/finished-proposals.md https://2ality.com/2021/09/class-static-block.html https://tc39.es/process-document/ https://tc39.es/ecma262/ https://v8.dev/features/top-level-await https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/matchAll https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/at https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/static
