ECMAScript 2023 的四個新玩意

fin
Jul 7, 2023

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 後這樣就方便多了

第一個範例應該是 n%5 === 0 我懶得改圖了

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

--

--