ECMAScript® 2023 Language Specification (tc39.es) 最近剛定案,確定會有四個新功能:
- Array.prototype.findLast / findLastIndex: 找陣列中最後一個符合條件的元素(或 index)
- Immutable 的陣列修改方式
- WeakMap 支援 Symbol 作為 key
- 支援 Hashbang 語法
以下一一解說
Array.prototype.findLast / findLastIndex
https://github.com/tc39/proposal-array-find-from-last
在之前如果要找到陣列中最後一個符合條件的元素,必須先反轉陣列再做 find。有了 findLast / findLastIndex 後這樣就方便多了
Immutable 的陣列修改方式
https://github.com/tc39/proposal-change-array-by-copy
總共四個方法 toReversed, toSorted, toSpliced, with
其中 toReversed, toSorted, toSpliced 都有原先對應的 reverse, sort, splice ,只差在前者執行完之後會產生一個全新的陣列,而後者會直接修改原始陣列。
with 則是新的陣列函式,語法是 Array.prototype.with(index, value) ,直接產出一個新的陣列,其中 index 位置的元素會被換成 value
這些新函式對於偏好 immutable 的 functional programming 來說很好用。
WeakMap 支援 Symbol 作為 key
https://github.com/tc39/proposal-symbols-as-weakmap-keys
直接效益是 weakmap 的使用上更為方便,原先只能用 object 當作 key,現在 Symbol 也可以作為 key,在 weakmap key 的使用上又更容易了一些
這改動另外也許正在制定中的 **Records & Tuples 有關聯,有興趣的可以到此 proposal 的 github 下面看詳細資訊**
hashbang 支援
https://github.com/tc39/proposal-hashbang
在 cli 下要直接執行檔案通常會需要在開頭有個 hashbang 如 `#!/usr/bin/env node`
這一層目前是 cli tool 如 node 執行環境會處理掉,再進 js engine。es2023 則會直接把『第一行』的 hashbang 忽略掉。
附上使用的情境 javascript — How to keep my shebang in place using webpack? — Stack Overflow