LoginSignup
97
46

More than 1 year has passed since last update.

【JavaScript】ES2023の新機能が何故かいまさら追加されていた

Posted at

ES2023その2 / ES2023 / ES2022 / ES2021

先日ES2023では新機能が2個しかなかったという話をしましたが、どういうわけか2023/01/30になってからES2023が2個追加されました
よくわかりませんが、どうやら1月までは前年のESになるみたいです。
なんで。

これらは2023/01/30に行われたTC39ミーティングで決定したようです。
他にIntl.NumberFormat V3もStage4への議題に上がったみたいですが、こちらは却下されたみたいです。
なんでそんなふわふわな言及なのかってまだアジェンダしかないから詳しいことがわからねえんだよ。

Finished Proposals

Change Array by copy

配列を破壊せずに操作するメソッドを追加します。

既存の配列操作メソッドは、変更後の値を返すと同時に元の値も変更してしまいます。

const a = [2, 3, 1];

const b = a;
b[1] = 4;
console.table(b); // [2, 4, 1]
console.table(a); // [2, 4, 1] ← ?

const c = a.sort();
console.table(c); // [1, 2, 4]
console.table(a); // [1, 2, 4] ← ??

const d = a.reverse();
console.table(d); // [4, 2, 1]
console.table(a); // [4, 2, 1] ← ????

これはひどい。

おかげで毎回Array.concat()やらArray.slice()やらの不正な使用を強制させられるという有様でした。

今回のProposalが通ったことで、ようやくまともに配列操作関数が扱えるようになります。

const a = [2, 3, 1];

const b = a.with(1, 4);
console.table(b); // [2, 4, 1]
console.table(a); // [2, 3, 1]

const c = a.toSorted();
console.table(c); // [1, 2, 3]
console.table(a); // [2, 3, 1]

const d = a.toReversed();
console.table(d); // [1, 3, 2]
console.table(a); // [2, 3, 1]

なお、ChromeではDev Trial 108でようやく使えるようになっただけで通常版リリースはいまだ未定、Firefoxも実装はされたもののリリース優先度はさして高くない、とかいう段階なので、一般的に書けるようになるのはまだまだ先です。

というか、そんな状態なのにFinished Proposalに入れるのか?

Symbols as WeakMap keys

WeakMapのキーにSymbolを使えますよ、というProposal。

const weakmap = new WeakMap();

const key = Symbol("key");
weakmap.set(key, 1); // OKになる

const key = "key";
weakmap.set(key, 1); // Uncaught TypeError: Invalid value used as weak map key

そもそもインスタンス使い捨てのJavaScriptで弱参照を使う理由がいまだによくわからない。
きっとライブラリとかツールチェーンとかで使われるのでしょう。たぶん。

ちなみに他の人が上げていた懸念点2点のうち、Symbol.for()で作ったSymbolの登録は禁止されました
well-knownなシンボルは許可されます。

weakmap.set(Symbol.iterator, 1); // OK
weakmap.set(Symbol.for("key"), 1); // Uncaught TypeError: Invalid value used as weak map key

こちらは2022/11/29リリースのChrome 108から利用可能です。
CanIUseには何故か出てこない

感想

リリースされてもいないのにFinishedになったりとか、リンク先のRFCがStage 3のままさっぱり更新されていなかったりとか、なんというかこう政治的事情を感じたりしないでもないというかなんか。

具体的にどういう経緯があったのかはわかりません。
ミーティングはクローズドでありライブ配信やアーカイブもないみたいで、さらに議事録が公開されるまで数ヶ月かかるので、それまでは何があったかわからないんですよね。

と思ったけどよく考えたら私リスニングが駄目なのでライブ配信があったところでわからんかったわ。
まあきっと、もっと詳しい誰かがそのうち詳細な経緯とかも含めて解説してくれることでしょう。

97
46
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
97
46