ES2023その2 / ES2023 / ES2022 / ES2021
2023年一発目ということで、ES2023にFinished Proposalsとして取り入れられた機能を見てみましょう。
ちなみにFinished Proposalは「複数の実装が既に存在する」が前提なので、2023という名前にもかかわらず既に一部のブラウザで使用可能です。
というかES2023の新機能は全てのモダンブラウザで既に使用可能です。
ES2023
Array find from last
末尾からの検索です。
const array1 = [5, 12, 8, 130, 4];
console.log(array1.find(element => element > 10)); // 12
console.log(array1.findLast(element => element > 10)); // 130
console.log(array1.findIndex(element => element > 10)); // 1
console.log(array1.findLastIndex(element => element > 10)); // 3
ArrayはindexOfとlastIndexOfで前後からの抽出をサポートしています。
しかしfindとfindIndexについては何故かfindLast
・findLastIndex
がない、という非対称な状態になっていました。
そこでfindLast、およびfindLastIndexを追加します。
これによって、後方からの検索メソッドが揃うことになりました。
findLastは2022年に全てのブラウザでサポートされました。
Hashbang Grammar
ファイルの先頭行にある#!
のみコメントとして扱います。
#! hoge ←これはコメント
#! fuga ←シンタックスエラー
シェルスクリプトの冒頭には、自分をどのプログラムで実行するかを指定するshebangという仕組みが存在します。
そして、JavaScriptのサーバ側実行環境であるNodeもshebangを使うことができます。
しかしJavaScriptにはこのような文法が存在しないので、Nodeと同じコードを使うとシンタックスエラーになってしまいます。
そのせいでNodeとJavaScriptで同じソースを使い回すことができませんでした。
ということで、JavaScriptでは先頭行の最初にある#!
のみコメントとして扱うことにします。
実際にプログラムが起動されるわけではなく、単なるコメントです。
またコメント扱いされるのは先頭行の先頭のみであり、2行目以降にある場合などはコード扱いとされます。
ブラウザには2019年ごろには既に実装されており、Proposalがようやく実装に追いついたというかんじです。
感想
え?
たったふたつだけ?
はいそうです。
includesにはじまったJavaScriptの近代化改修ですが、なぜか2021年の途中あたりから急減速し、2022年はたったの二つだけになってしまいました。
(ES2023は2022年に作られるので、見た目的に一年ずれます)
いきなり勢いが止まってしまったわけですが、これはいったいどういうことなのでしょうか。
commit数はそこまで大きく変わっているわけではなさそうです。
また、新しいProposalの発行もそれなりに行われているので、TC39の活動が停滞していることもなさそうです。
ということは、これはブラウザ側の実装が進んでいないということなのでしょうか?
TC39では数か月ごとにミーティングが行われ、各ブラウザの中の人や関係者が集ってProposalの方向性や進展などを話し合っています。
試しに記事執筆時点で最新の2022年9月に行われたミーティングを覗いてみると、Stage3に到達してから1年以上経ってるTemporalの仕様調整が未だに難航していたりしました
このような齟齬が進捗停滞の理由の一端なのかもしれません。
まあ全部読んだわけじゃないからわかりませんけどね。