🕌

Node.js v20 から使える ECMAScript の新機能

2023/04/20に公開

Node.js v20 リリースされました。

https://nodejs.org/en/blog/announcements/v20-release-announce

V8 のバージョンが 11.3 まで上がったことで、いくつかの新しい ECMAScript の機能が使えるようになりました。v フラグが好きなのでうれしいです。

どのバージョンからどの機能が使えるようになったかとか忘れてしまうのでメモしておきます。

String.prototype.isWellFormed / String.prototype.toWellFormed

https://github.com/tc39/proposal-is-usv-string

文字列が Well Formed Code Unit Sequence かどうか判定する isWellFormed と、それに変換する toWellFormed が追加されます。WebIDL の文脈では USV 文字列とか言われますね。

これは WebAssembly みたいな USV 文字列前提の環境とやり取りするときに便利。Babel みたいな JavaScript を解釈するツールを JavaScript で書くときにも便利かも。

このあたりの話は過去に Cybozu フロントエンドエキスパートチームのブログに書いたのでよければそっちを参照してください。この記事自体は ES2022 の import/export 周りの解説ですが、合わせて USV 文字列とかについても解説しています。

https://cybozu.github.io/frontend-expert/posts/strings-as-import-export

Change Array by Copy

https://github.com/tc39/proposal-change-array-by-copy

Array.prototype.sort とか、Array.prototype.reverse とか、レシーバの配列を変更するので面倒くさいですよね。破壊しないやつを用意しました、という提案です。

有名な提案ですよね。過去にブログも書きましたが当時とはだいぶ変わっています。

https://sosukesuzuki.dev/posts/change-array-by-copy/

当時は今よりももっと多くのメソッドをサポートする予定だったみたいですが、最終的には次の4つ(+ それの TypedArray 版)だけになりました。

  • Array.prototype.toReversed()
  • Array.prototype.toSorted(compareFn)
  • Array.prototype.toSpliced(start, deleteCount, ...items)
  • Array.prototype.with(index, value)

Resizable ArrayBuffer

https://github.com/tc39/proposal-resizablearraybuffer

ArrayBuffer が可変になる提案です。ArrayBuffer を作るときに最大長を指定して、その長さの内なら resize メソッドでサイズが変更できるようになります。

petamoriken さんの記事が詳しいので、そちらを参照してください。

https://zenn.dev/petamoriken/articles/473c0f9bf546cd

正規表現の v フラグ

v フラグ大好き!一番好きなフラグです!

https://github.com/tc39/proposal-regexp-v-flag

正規表現に v フラグを追加する提案です。v フラグ下では Set Notation と Properties of Strings が有効になります。僕はこのプロポーザルが大好きなので大変うれしいです。使い所はあんまり思いついていないですが。

このプロポーザルについても petamoriken さんの記事が詳しいので、そちらを参照してください。

https://zenn.dev/petamoriken/articles/54e5d29c54e7f5

あと、Unicode と正規表現のインテグレーションについては UTS#18 を参照してください。

https://unicode.org/reports/tr18/

Discussion