Draft ECMA-262 / June 25, 2026

ECMAScript® 2027 言語仕様

この仕様について

https://tc39.es/ecma262/ にある文書は、最も正確で最新のECMAScript仕様です。これは、最新の年次スナップショットの内容に加えて、完了した提案 — すなわち、提案プロセスにおいてStage 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標準の第1版は、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例外処理、エラーのより厳密な定義、数値出力の書式化、および将来の言語の成長を見越した小さな変更が導入されました。ECMAScript標準の第3版は1999年12月のEcma総会で採択され、2002年6月にISO/IEC 16262:2002として発行されました。

第3版の発行後、ECMAScriptは、ほぼすべてのWebブラウザーでサポートされるプログラミング言語となったWorld Wide Webと連動して大規模に普及しました。ECMAScriptの第4版を開発するために重要な作業が行われました。しかし、その作業は完了せず、ECMAScriptの第4版として発行されることもありませんでしたが、その一部は第6版の開発に組み込まれました。

ECMAScriptの第5版(ECMA-262第5th版として発行)は、ブラウザー実装の間で一般的になっていた言語仕様の事実上の解釈を明文化し、第3版の発行以降に登場した新機能のサポートを追加しました。そのような機能には、アクセサープロパティ、オブジェクトの反射的な作成と検査、プロパティ属性のプログラムによる制御、追加の配列操作関数、JSONオブジェクトエンコーディング形式のサポート、強化されたエラーチェックとプログラムセキュリティを提供するstrict modeが含まれます。第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、分割代入パターン、proper tail callsが含まれていました。ECMAScriptの組み込みライブラリは、map、set、およびバイナリ数値の配列を含む追加のデータ抽象化、ならびに文字列と正規表現におけるUnicode補助文字の追加サポートを提供するよう拡張されました。組み込みもサブクラス化を通じて拡張可能にされました。第6版は、定期的で漸進的な言語およびライブラリの拡張の基盤を提供します。第6版は2015年6月の総会で採択されました。

ECMAScript 2016は、Ecma TC39の新しい年次リリース周期とオープンな開発プロセスの下でリリースされた最初のECMAScript版でした。ECMAScript 2015のソース文書から平文のソース文書が構築され、GitHub上で完全に進められるさらなる開発の基盤として機能しました。この標準の開発期間を通じて、何百ものpull requestとissueが提出され、何千ものバグ修正、編集上の修正、その他の改善を表していました。さらに、この取り組みを支援するため、Ecmarkup、Ecmarkdown、Grammarkdownを含む多数のソフトウェアツールが開発されました。ES2016には、新しいべき乗演算子のサポートも含まれ、Array.prototypeincludesという新しいメソッドが追加されました。

ECMAScript 2017では、Async Functions、Shared Memory、Atomicsが導入され、さらに小規模な言語およびライブラリの拡張、バグ修正、編集上の更新が行われました。Async functionsは、promiseを返す関数のための構文を提供することで、非同期プログラミング体験を改善します。Shared MemoryとAtomicsは、並列CPU上であっても明確に定義された実行順序を保証するアトミック操作を使用して、複数のエージェントからなるプログラムが通信できるようにする新しいメモリモデルを導入します。また、Objectに新しい静的メソッドとしてObject.valuesObject.entriesObject.getOwnPropertyDescriptorsが含まれました。

ECMAScript 2018では、async iterator protocolとasync generatorsによる非同期反復のサポートが導入されました。また、4つの新しい正規表現機能、すなわちdotAllフラグ、名前付きキャプチャグループ、Unicodeプロパティエスケープ、および後読みアサーションも含まれました。最後に、object restおよびspreadプロパティも含まれました。

ECMAScript 2019では、いくつかの新しい組み込み関数が導入されました。配列を平坦化するためのArray.prototype上のflatflatMapObject.entriesの戻り値を直接新しいObjectに変換するObject.fromEntries、および広く実装されていたものの非標準であったString.prototype.trimLeftおよびtrimRight組み込みの、よりよい名前の代替としてのString.prototype上のtrimStarttrimEndです。さらに、構文と意味論に対するいくつかの小さな更新も含まれました。更新された構文には、任意のcatch束縛パラメーター、およびJSONとの整合のために文字列リテラル内でU+2028(LINE SEPARATOR)とU+2029(PARAGRAPH SEPARATOR)を許可することが含まれました。その他の更新には、Array.prototype.sortが安定ソートであることを要求すること、JSON.stringifyが入力に関係なく整形式UTF-8を返すことを要求すること、およびFunction.prototype.toStringが対応する元のソーステキストまたは標準のプレースホルダーのいずれかを返すことを要求することで明確化することが含まれました。

ECMAScript 2020、第11th版では、globalな正規表現によって生成されるすべてのmatchオブジェクトに対するiteratorを生成する、StringsのためのmatchAllメソッド、動的なspecifierでModulesを非同期にimportする構文であるimport()、任意精度整数を扱うための新しい数値プリミティブであるBigInt、短絡しない新しいPromiseコンビネーターであるPromise.allSettled、globalなthis値にアクセスする普遍的な方法であるglobalThis、modules内で使用するための専用構文export * as ns from 'module'for-in列挙順序の標準化の拡大、Module内で利用可能で、そのModuleに関する文脈情報を含み得るhost-populated objectであるimport.metaが導入され、さらに“nullish”な値(undefinedまたはnull)を扱う作業を改善する2つの新しい構文機能、すなわち値選択演算子であるnullish coalescingと、アクセス/呼び出し対象の値がnullishである場合に短絡するプロパティアクセスおよび関数呼び出し演算子であるoptional chainingが追加されました。

ECMAScript 2021、第12th版では、StringsのためのreplaceAllメソッド、入力値がfulfilledになったときに短絡するPromiseコンビネーターであるPromise.any、複数のエラーを一度に表すための新しいError型であるAggregateError、論理代入演算子(??=&&=||=)、対象オブジェクトをガベージコレクションから保持することなく参照するためのWeakRef、対象オブジェクトがガベージコレクトされたときに実行されるcleanup操作の登録と登録解除を管理するFinalizationRegistry、数値リテラルの区切り文字(1_000)が導入され、またArray.prototype.sortはより精密にされ、実装定義のソート順序となる場合の数が減らされました。

ECMAScript 2022、第13th版では、top-level awaitが導入され、moduleのトップレベルでそのキーワードを使用できるようになりました。新しいclass要素として、publicおよびprivateのinstance fields、publicおよびprivateのstatic fields、private instance methodsおよびaccessors、private static methodsおよびaccessors、classごとの評価初期化を行うためのclass内のstatic blocks、オブジェクト上のprivate fieldsの存在をテストするための#x in obj構文、matched substringsの開始および終了インデックスを提供する/dフラグによる正規表現match indices、エラーに因果関係の連鎖を記録するために使用できるErrorオブジェクト上のcauseプロパティ、相対インデックス指定を可能にするStrings、Arrays、TypedArraysのためのatメソッド、およびObject.prototype.hasOwnPropertyの便利な代替であるObject.hasOwnが導入されました。

ECMAScript 2023、第14th版では、Array.prototypeおよびTypedArray.prototype上のtoSortedtoReversedwithfindLastfindLastIndexメソッド、ならびにArray.prototype上のtoSplicedメソッドが導入されました。また、実行可能なECMAScriptファイルをより扱いやすくするため、ファイルの先頭における#!コメントのサポートが追加され、ほとんどのSymbolsをweak collectionsのキーとして使用できるようになりました。

ECMAScript 2024、第15th版では、ArrayBuffersおよびSharedArrayBuffersのサイズ変更と転送のための機能が追加されました。文字列の集合を扱うためのより高度な機能を持つRegExpsを作成する新しいRegExp /vフラグが追加され、Promisesを構築するための便利なメソッドであるPromise.withResolvers、データを集約するためのObject.groupByおよびMap.groupByメソッド、shared memoryの変更を非同期に待つためのAtomics.waitAsyncメソッド、および文字列が整形式Unicodeのみを含むかをチェックし保証するためのString.prototype.isWellFormedおよびString.prototype.toWellFormedメソッドが導入されました。

ECMAScript 2025、第16th版では、iteratorsを扱うための関連する静的およびprototypeメソッドを持つ新しいIterator globalが追加されました。Setsに対して一般的な操作を実行するためのSet.prototype上のメソッドが追加され、JSON modulesをimportするサポート、およびimported modulesの属性を宣言する構文が追加されました。文字列を正規表現内で安全に使用できるようエスケープするためのRegExp.escapeメソッド、正規表現内でmodifier flagsをインラインで有効化および無効化する構文、Promiseを返す場合も返さない場合もある関数を呼び出し、結果が常にPromiseになることを保証するPromise.tryメソッド、ならびに新しいFloat16Array TypedArray kindと、関連するDataView.prototype.getFloat16DataView.prototype.setFloat16Math.f16roundメソッドが追加されました。

ECMAScript 2026、第17th版では、大きさの異なるNumbersのiterableを、精度損失を最小化しながら合計するためのMath.sumPreciseiteratorsを連結するためのIterator.concatasync iterablesおよびその他のasync sourcesからArraysを構築するためのArray.fromAsync、error objectsを識別するためのError.isError、keyがまだ存在しない場合に取得時に使用するdefault valueを提供するためのMap.prototypeおよびWeakMap.prototype上のメソッド、16進数およびbase64でエンコードされたバイナリデータのStringsとの変換を行うためのUint8Array上のメソッド、JSON sourceの一致したsegmentにアクセスするためのJSON.parse reviversへのパラメーター、およびprimitive valuesに対するJSON.stringify出力を細かく制御するためのJSON.rawJSONが追加されました。

多くの組織を代表する数十人の個人が、Ecma TC39内で、この版および以前の版の開発に非常に重要な貢献をしてきました。さらに、TC39のECMAScriptへの取り組みを支援する活発なコミュニティが生まれました。このコミュニティは、多数のdraftをレビューし、何千ものbug reportを提出し、実装実験を行い、test suitesに貢献し、世界中のdeveloperコミュニティにECMAScriptについて教育してきました。残念ながら、この取り組みに貢献したすべての人および組織を特定して謝意を示すことは不可能です。

Allen Wirfs-Brock
ECMA-262、第6th版、Project Editor

Brian Terlson
ECMA-262、第7th版から第10th版まで、Project Editor

Jordan Harband
ECMA-262、第10th版から第12th版まで、Project Editor

Kevin Gibbons
ECMA-262、第12th版から第17th版まで、Project Editor

Shu-yu Guo
ECMA-262、第12th版から第18th版まで、Project Editor

Michael Ficarra
ECMA-262、第12th版から第18th版まで、Project Editor

Richard Gibson
ECMA-262、第18th版、Project Editor

Ron Buckton
ECMA-262、第18th版、Project Editor

Nicolò Ribaudo
ECMA-262、第18th版、Project Editor

Linus Groh
ECMA-262、第18th版、Project Editor