ES2022
ES2021 ← ES2022 → ES2023
【JavaScript】ES2022の新機能 #日本語訳 - Qiita
Class Fields
privateメソッド・privateフィールドを作れるよ!
code:private.js
class Foo{
#privatemethod() {
return "privatemethod";
}
publicmethod() {
return "publicmethod";
}
}
先頭に#をつければprivateになる
メソッド名自体変わってしまうからリファクタリングがとてもつらいよ!
IDEの機能でほぼ自動でできるよbsahd.icon
(privateの関数なのでクラス外で使われていない前提)
できたとしてもどこか変更されていない箇所が出てきそうで怖いな(経験談的に)Mijinko_SD.icon
変更前の名前のエイリアス作って、エイリアス経由で踏んだらログが出るようにするbsahd.icon
何故TypeScriptのようにアクセス修飾子にしなかったのか
TSはコンパイラレベルでアクセス修飾子を確認してたので、ts-ignoreですり抜けられたbsahd.icon
(tree-shakingされて使えなくなる可能性はあるが)
RegExp Match Indices
Top-level await
モジュールの一番浅いところでawaitできるようになった
つまりどこでもawaitできるように
これにより、モジュール初期化終了までにpromiseの結果を取得できるようになった
詳細:top-level awaitがどのようにES Modulesに影響するのか完全に理解する #JavaScript - Qiita
ただこれを使うと、ES2022より前のバージョンにトランスパイルできなくなるので注意(2024/12/08現在)
esbuildはこの仕様だったはずだけど、Babelはどうなんだろう
Array.prototype.at()
配列の要素を負の数で指定できるようになった
Pythonの配列内要素指定と同じ仕様と考えるとわかりやすい
Error Cause
入れ子try ... catchでエラーが発生した場合に、子のcatchで受け取ったエラー内容も参照できるようになった
code:errorCause.js
try{
try{
try{
throw new Error('Error1');
}catch(e){
throw new Error('Error2', {cause: e});
}
}catch(e){
throw new Error('Error3', {cause: e});
}
}catch(e){
console.table(e); // Error3
console.table(e.cause); // Error2
console.table(e.cause.cause); // Error1
}