Draft ECMA-262 / May 7, 2026

ECMAScript® 2027 Language Specification

この仕様について

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ブラウザに登場しました。ウェブブラウザに組み込まれた言語として有名ですが、サーバや組込み用途などブラウザ以外でも幅広く採用され、世界で最も広く使われている汎用プログラミング言語の一つとなりました。

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版が承認されました。第1版と第2版の間の変更点は編集上のものです。

標準の第3版では、強力な正規表現の導入、文字列処理の強化、新たな制御文、try/catch例外処理、エラーのより厳密な定義、数値出力の書式設定、将来の言語発展を見越した軽微な変更が加えられました。第3版は1999年12月のEcma総会で採択され、2002年6月にISO/IEC 16262:2002として発行されました。

第3版発行後、ECMAScriptはWorld Wide Webとともに爆発的に普及し、事実上すべてのウェブブラウザが対応するプログラミング言語となりました。ECMAScript第4版の開発にも大きな労力が注がれましたが、これは完成には至らず第4版として出版されませんでしたが、一部は第6版の開発に取り入れられました。

ECMAScript第5版(ECMA-262 第5版として発行)は、ブラウザ実装で一般的になった仕様の事実上の解釈を規格化し、第3版以降に登場した新機能への対応も追加しました。これにはアクセサプロパティ、オブジェクトの動的生成や検査、プロパティ属性の制御、配列操作関数追加、JSONオブジェクト形式、エラー検出やプログラムの安全性を高める厳格モードなどが含まれます。第5版は2009年12月のEcma総会で採択されました。

第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活用支援がありました。主な拡張には、モジュール、クラス宣言、レキシカルブロックスコープ、イテレータ・ジェネレータ、非同期プログラミングのためのPromise、分割代入パターン、適切な末尾呼び出しなどが含まれます。組み込みライブラリには、MapやSet、バイナリ数値配列などのデータ抽象サポート、文字列と正規表現のUnicode補助文字対応の拡張、サブクラス化による拡張性の向上が加わりました。第6版は、定期的かつ段階的な言語・ライブラリの改良の基盤となります。第6版は2015年6月の総会で採択されました。

ECMAScript 2016は、Ecma TC39の新しい年次リリースサイクルとオープンな開発プロセスによる最初の版です。ECMAScript 2015のソース文書をもとにプレーンテキストのソース文書が作成され、全てGitHub上で開発が進みました。この規格の開発期間中に数百件のプルリクエスト・イシューが提起され、数千件のバグ修正や編集修正、改善がなされました。さらに、Ecmarkup、Ecmarkdown、Grammarkdownなど多数の支援ツールも開発されました。ES2016では新たにべき乗演算子を導入し、Array.prototypeincludes メソッドを追加しました。

ECMAScript 2017ではAsync関数、共有メモリ、Atomicsが導入され、その他小規模な言語・ライブラリアップデートやバグ修正が行われました。Async関数はPromiseを返す関数のための構文を提供し、非同期プログラミング体験を向上させます。共有メモリとAtomicsにより、複数エージェントプログラムが並列CPU上でも確実な実行順序を保ったままアトミック操作で通信できる新しいメモリモデルが導入されました。また、Object.valuesObject.entriesObject.getOwnPropertyDescriptorsなどの静的メソッドも追加されました。

ECMAScript 2018では、asyncイテレータープロトコルとasyncジェネレータによる非同期反復のサポートが導入されました。また、dotAllフラグ、名前付きキャプチャグループ、Unicodeプロパティエスケープ、後方参照といった4つの正規表現新機能、さらにオブジェクトのレスト・スプレッドプロパティも追加されました。

ECMAScript 2019では、配列の平坦化を行うArray.prototype.flatflatMapObject.entriesの戻り値を直接新しいオブジェクトへ変換するObject.fromEntries、より適切な名前のString.prototype.trimStarttrimEndが導入されました(従来の非標準組み込みString.prototype.trimLeft trimRightの代替)。その他、構文・意味論の小規模な更新として、catchパラメータの省略と、JSONと整合するようにU+2028(行区切り)・U+2029(段落区切り)も文字列リテラルで許容されました。さらには、Array.prototype.sortの安定ソートの義務化、JSON.stringifyの常に整形式なUTF-8返却、Function.prototype.toStringのソースまたは標準的プレースホルダ返却要件が明確化されました。

第11版であるECMAScript 2020では、グローバルな正規表現で生成される全マッチオブジェクトを反復できるmatchAll(String)、動的指定子で非同期的にモジュールをインポートするimport()構文、任意精度整数を扱う新プリミティブ型BigInt、短絡しないPromise結合子Promise.allSettled、グローバルthis参照のためのglobalThis、モジュール専用のexport * as ns from 'module'構文、for-in列挙順序の規格化、import.meta(ホストが与えるモジュール情報オブジェクト)、nullish値への対応を強化するnull合体(??)演算子およびオプショナルチェイン(?.)も追加されました。

第12版であるECMAScript 2021では、replaceAll(String)、Promise.any(いずれか1つがfulfilled時に短絡するPromise結合子)、複数エラー同時表現の新しいエラー型AggregateError、論理代入演算子(??=, &&=, ||=)、ガベージコレクション抑止なし参照用WeakRef、クリーンアップ処理管理のFinalizationRegistry、数値リテラルのセパレータ(1_000)、Array.prototype.sortの仕様上より明確な定義などが導入されました。

第13版であるECMAScript 2022では、モジュールのトップレベルでawaitが使用可能になり、新しいクラス要素(パブリック/プライベートのインスタンスフィールドや静的フィールド、プライベートインスタンスメソッド・アクセサ、プライベート静的メソッド・アクセサ)、クラス内のstaticブロック、#x in obj構文、正規表現の/dフラグ(インデックス情報の取得)、Errorオブジェクトのcauseプロパティ、文字列・配列・TypedArrayatメソッド、Object.hasOwnが追加されました。

第14版であるECMAScript 2023では、Array.prototypeTypedArray.prototypetoSortedtoReversedwithfindLastfindLastIndexメソッド、Array.prototypetoSplicedが追加され、実行可能ECMAScriptファイル支援のため先頭の#!コメント対応、大半のSymbolがWeakコレクションのキーで使用可能となりました。

第15版であるECMAScript 2024では、ArrayBufferやSharedArrayBufferのリサイズ・転送機能、より高度な文字列集合操作に利用できる新しい正規表現/vフラグ、Promise構築のためのPromise.withResolvers、データ集約用のObject.groupByMap.groupBy、共有メモリの非同期監視Atomics.waitAsync、文字列のUnicode整形式チェック/修正String.prototype.isWellFormedtoWellFormedが導入されました。

第16版であるECMAScript 2025では、イテレータ操作用の新たなグローバルIteratorと関連静的・プロトタイプメソッド、Setの共通操作追加、JSONモジュールのimportやimport属性宣言構文、正規表現で安全に使えるように文字列をエスケープするRegExp.escape、フラグのインライン切替構文、Promise化を保証するPromise.try、新しい型付き配列Float16Array、およびDataView.prototype.getFloat16setFloat16Math.f16roundメソッドが追加されました。

第17版であるECMAScript 2026では、さまざまな大きさの数値を精度落としを抑えて合計するMath.sumPrecise、イテレータ連結のIterator.concat、asyncイテラブルなどから非同期でArrayを構築するArray.fromAsync、エラー判定のError.isError、MapとWeakMap取得時のデフォルト値提供メソッド、Uint8Arrayによる16進・base64文字列変換、JSON.parseのreviverにJSONソース断片を受けるパラメータ、プリミティブ値の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版