LoginSignup
150
64

More than 1 year has passed since last update.

【JavaScript】ES2023の新機能

Last updated at Posted at 2023-01-01

ES2023その2 / ES2023 / ES2022 / ES2021

2023年一発目ということで、ES2023Finished 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はindexOflastIndexOfで前後からの抽出をサポートしています。

しかしfindfindIndexについては何故かfindLastfindLastIndexがない、という非対称な状態になっていました。
そこで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の仕様調整が未だに難航していたりしました
このような齟齬が進捗停滞の理由の一端なのかもしれません。
まあ読んだわけじゃないからわかりませんけどね。

150
64
1

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
150
64