new 演算子super キーワード? : ), )if 文do-while 文while 文for 文for-in、for-of、および for-await-of 文continue 文break 文return 文with 文switch 文throw 文try 文debugger 文?uem/p1-90`https://tc39.es/ecma262/ にある文書は、最も正確かつ最新の ECMAScript 仕様です。この文書には、最新の年次スナップショットの内容に加え、すべての完成した提案が含まれています。これらは提案プロセスのステージ 4 に到達し、複数の実装に実装されており、次の年次スナップショットに含まれる提案です。過去のスナップショットは https://ecma-international.org/publications-and-standards/standards/ecma-262/ で入手できます。
この仕様は、ECMAScript コミュニティの協力を得て GitHub 上で開発されています。この仕様の開発に貢献するには、いくつかの方法があります。
この文書の作成方法について詳しくは、
この Ecma 標準は、ECMAScript 2027 言語を定義します。これは ECMAScript 言語仕様の第18版です。ECMAScript はいくつかの先行技術に基づいており、最もよく知られているものは JavaScript(Netscape)と JScript(Microsoft)です。この言語は Netscape の Brendan Eich によって考案され、同社の Navigator 2.0 ブラウザーで初めて登場しました。Web ブラウザーに組み込まれた言語として最もよく知られていますが、サーバーや組込みアプリケーションを含むブラウザー以外の用途にも広く採用され、世界で最も広く使用されている汎用プログラミング言語の一つへと成長しました。
ECMAScript 言語仕様の開発は、1996年11月に始まりました。この Ecma 標準の初版は、1997年6月の Ecma 総会で採択されました。
この Ecma 標準は、迅速承認手続きによる採用のため ISO/IEC JTC 1 に提出され、1998年4月に国際標準 ISO/IEC 16262 として承認されました。1998年6月の Ecma 総会は、ISO/IEC 16262 との完全な整合性を維持するため、ECMA-262 の第2版を承認しました。初版と第2版の間の変更は、編集上のものです。
この標準の第3版では、強力な正規表現、文字列処理の改善、新しい制御文、try/catch による例外処理、エラー定義の厳密化、数値出力の書式設定、および将来の言語の発展を見据えた小規模な変更が導入されました。ECMAScript 標準の第3版は、1999年12月の Ecma 総会で採択され、2002年6月に ISO/IEC 16262:2002 として発行されました。
第3版の発行後、ECMAScript は World Wide Web とともに大規模に普及し、事実上すべての Web ブラウザーでサポートされるプログラミング言語となりました。ECMAScript の第4版を開発するために多大な作業が行われました。しかし、その作業は完了せず、ECMAScript の第4版として発行されることはありませんでしたが、その一部は第6版の開発に取り込まれました。
ECMAScript の第5版(ECMA-262 第5版として発行)は、ブラウザー実装間で共通となっていた言語仕様の事実上の解釈を明文化し、第3版の発行以降に登場した新機能のサポートを追加しました。これらの機能には、
第5版は、迅速承認手続きによる採用のため ISO/IEC JTC 1 に提出され、国際標準 ISO/IEC 16262:2011 として承認されました。ECMAScript 標準の第5.1版には軽微な修正が取り込まれており、ISO/IEC 16262:2011 と同一の本文になっています。第5.1版は、2011年6月の Ecma 総会で採択されました。
第6版の集中的な開発は、第5版の発行準備が進められていた2009年に始まりました。しかし、それに先立って、1999年の第3版の発行にまでさかのぼる、広範な実験と言語拡張の設計作業が行われていました。まさに第6版の完成は、15年にわたる取り組みの集大成です。この版の目標には、大規模アプリケーション、ライブラリの作成、および他の言語のコンパイル先としての ECMAScript の利用に対するサポートの改善が含まれていました。主な拡張には、モジュール、クラス宣言、レキシカルなブロックスコープ、イテレーターとジェネレーター、非同期プログラミングのためのプロミス、分割代入パターン、および適正な末尾呼出しが含まれます。ECMAScript の組込みライブラリは、マップ、セット、バイナリ数値の配列などの追加のデータ抽象化をサポートするように拡張され、文字列および正規表現における Unicode 補助文字のサポートも追加されました。また、組込み機能はサブクラス化によって拡張可能になりました。第6版は、言語とライブラリの定期的かつ段階的な拡張の基盤を提供します。第6版は、2015年6月の総会で採択されました。
ECMAScript 2016 は、Ecma TC39 の新しい年次リリース周期とオープンな開発プロセスのもとでリリースされた最初の ECMAScript の版です。以後の開発をすべて GitHub 上で行うための基礎として、ECMAScript 2015 のソース文書からプレーンテキストのソース文書が作成されました。この標準の開発が行われた1年間に、数千件のバグ修正、編集上の修正、その他の改善に相当する数百件のプルリクエストと課題が提出されました。さらに、この取り組みを支援するため、Ecmarkup、Ecmarkdown、Grammarkdown など、多数のソフトウェアツールが開発されました。ES2016 には新しいべき乗演算子のサポートも含まれ、Array.prototype に includes という新しいメソッドが追加されました。
ECMAScript 2017 では、非同期関数、共有メモリ、およびアトミック操作が導入され、あわせて小規模な言語とライブラリの拡張、バグ修正、および編集上の更新が行われました。非同期関数は、プロミスを返す関数のための構文を提供することで、非同期プログラミングの利便性を向上させます。共有メモリとアトミック操作は、並列 CPU 上でも明確に定義された実行順序を保証するアトミック操作を使用して、複数のObject.values、Object.entries、および Object.getOwnPropertyDescriptors が追加されました。
ECMAScript 2018 では、非同期イテレータープロトコルと非同期ジェネレーターを介した非同期反復のサポートが導入されました。また、正規表現に4つの新機能として、dotAll フラグ、名前付きキャプチャグループ、Unicode プロパティエスケープ、および後読みアサーションが追加されました。最後に、オブジェクトの残余プロパティとスプレッドプロパティが追加されました。
ECMAScript 2019 では、いくつかの新しい組込み関数が導入されました。配列を平坦化するための Array.prototype の flat と flatMap、Object.entries の戻り値を直接新しい Object に変換するための Object.fromEntries、および広く実装されているものの非標準である組込み関数 String.prototype.trimLeft と trimRight に代わる、より適切な名前を持つ String.prototype の trimStart と trimEnd です。さらに、構文と意味論にいくつかの小規模な更新が加えられました。構文の更新には、catch 束縛パラメーターの省略、および JSON との整合性のために文字列リテラル内で U+2028(LINE SEPARATOR)と U+2029(PARAGRAPH SEPARATOR)を許可することが含まれます。その他の更新には、Array.prototype.sort を安定ソートとする要件、入力にかかわらず JSON.stringify が整形式の UTF-8 を返す要件、および対応する元のソーステキストか標準のプレースホルダーのいずれかを返すことを要求することによる Function.prototype.toString の明確化が含まれます。
第11版である ECMAScript 2020 では、グローバルな正規表現によって生成されるすべての一致オブジェクトのイテレーターを生成する String の matchAll メソッド、動的な指定子でモジュールを非同期にインポートする構文 import()、任意精度のBigInt、短絡しない新しい Promise コンビネーター Promise.allSettled、グローバルな this 値にアクセスするための汎用的な方法 globalThis、モジュール内で使用する専用の構文 export * as ns from 'module'、for-in の列挙順序の標準化の進展、モジュール内で利用でき、そのモジュールのコンテキスト情報を含む場合がある、import.meta が導入されました。さらに、“nullish” な値(
第12版である ECMAScript 2021 では、String の replaceAll メソッド、入力値の一つが履行されると短絡する Promise コンビネーター Promise.any、複数のエラーを一度に表す新しい Error 型 AggregateError、論理代入演算子(??=、&&=、||=)、対象オブジェクトのガベージコレクションを妨げずに参照するための WeakRef、対象オブジェクトがガベージコレクションされるときに実行されるクリーンアップ操作の登録と登録解除を管理する FinalizationRegistry、および数値リテラルの区切り文字(1_000)が導入されました。また、Array.prototype.sort がより厳密に定義され、
第13版である ECMAScript 2022 では、モジュールのトップレベルでawait、新しいクラス要素として、公開および非公開のインスタンスフィールド、公開および非公開の静的フィールド、非公開のインスタンスメソッドとアクセサー、および非公開の静的メソッドとアクセサー、クラスの評価ごとに初期化を実行するクラス内の静的ブロック、オブジェクト上の非公開フィールドの存在を検査する #x in obj 構文、一致した/d フラグによる正規表現の一致インデックス、エラーの原因の連鎖を記録するために使用できる Error オブジェクトの cause プロパティ、相対インデックスを使用できる String、Array、および at メソッド、ならびに Object.prototype.hasOwnProperty に代わる便利な Object.hasOwn が導入されました。
第14版である ECMAScript 2023 では、Array.prototype と TypedArray.prototype に toSorted、toReversed、with、findLast、および findLastIndex メソッドが導入され、Array.prototype には toSpliced メソッドも導入されました。また、実行可能な ECMAScript ファイルをより容易に扱えるよう、ファイル先頭の #! コメントのサポートが追加され、弱いコレクションのキーとしてほとんどの Symbol を使用できるようになりました。
第15版である ECMAScript 2024 では、ArrayBuffer と SharedArrayBuffer のサイズ変更および転送のための機能が追加されました。また、文字列の集合を扱うためのより高度な機能を備えた RegExp を作成する新しい RegExp の /v フラグが追加されました。さらに、Promise を構築するための便利なメソッド Promise.withResolvers、データを集約するための Object.groupBy と Map.groupBy メソッド、共有メモリの変更を非同期に待機するための Atomics.waitAsync メソッド、および文字列が整形式の Unicode のみを含むことを検査し、保証するための String.prototype.isWellFormed と String.prototype.toWellFormed メソッドが導入されました。
第16版である ECMAScript 2025 では、イテレーターを扱うための静的メソッドとプロトタイプメソッドを備えた、新しいグローバルな Iterator が追加されました。また、Set に対する一般的な操作を実行するメソッドが Set.prototype に追加され、JSON モジュールのインポートのサポートと、インポートするモジュールの属性を宣言する構文が追加されました。さらに、正規表現内で安全に使用できるように文字列をエスケープする RegExp.escape メソッド、正規表現内で修飾フラグをインラインで有効または無効にする構文、Promise を返す場合も返さない場合もある関数を呼び出し、その結果が常に Promise になることを保証する Promise.try メソッド、および新しい Float16Array と、それに関連する DataView.prototype.getFloat16、DataView.prototype.setFloat16、Math.f16round メソッドが追加されました。
第17版である ECMAScript 2026 では、精度の損失を最小限に抑えながら、大きさの異なる Number の反復可能オブジェクトを合計する Math.sumPrecise、イテレーターを順につなぐ Iterator.concat、非同期反復可能オブジェクトやその他の非同期ソースから Array を構築する Array.fromAsync、エラーオブジェクトを識別する Error.isError、取得時にキーが存在しない場合に使用する既定値を提供するための Map.prototype と WeakMap.prototype のメソッド、16進数および base64 で符号化されたバイナリデータの String との相互変換を行う Uint8Array のメソッド、一致した JSON ソースの部分にアクセスするための JSON.parse の reviver のパラメーター、およびプリミティブ値に対する JSON.stringify の出力を細かく制御するための JSON.rawJSON が追加されました。
多くの組織を代表する数十人の人々が、Ecma TC39 において、この版および以前の各版の開発に非常に大きな貢献をしました。さらに、TC39 の ECMAScript に関する取り組みを支援する活発なコミュニティが生まれました。このコミュニティは、多数の草案をレビューし、数千件のバグ報告を提出し、実装実験を行い、テストスイートを提供し、世界中の開発者コミュニティに ECMAScript についての知識を広めてきました。残念ながら、この取り組みに貢献したすべての個人と組織を特定し、謝意を表すことはできません。
Allen Wirfs-Brock
ECMA-262, プロジェクト編集者, 第6版
Brian Terlson
ECMA-262, プロジェクト編集者, 第7版から第10版
Jordan Harband
ECMA-262, プロジェクト編集者, 第10版から第12版
Kevin Gibbons
ECMA-262, プロジェクト編集者, 第12版から第17版
Shu-yu Guo
ECMA-262, プロジェクト編集者, 第12版から第18版
Michael Ficarra
ECMA-262, プロジェクト編集者, 第12版から第18版
Richard Gibson
ECMA-262, プロジェクト編集者, 第18版
Ron Buckton
ECMA-262, プロジェクト編集者, 第18版
Nicolò Ribaudo
ECMA-262, プロジェクト編集者, 第18版
Linus Groh
ECMA-262, プロジェクト編集者, 第18版