このページはECMAScript® 2020 Language SpecificationIntroduction章をJavaScriptの学習目的で私的に日本語訳したものであり、直訳と意訳および推測が混在しています。そのため内容については正確ではない可能性があります。正確な情報を知りたい場合は、原文をご覧ください。また一部訳者によるコメントが含まれていることがあります。※このサイトの内容で損害や不利益を受けたとしても当方は一切の責任を負いません。

ECMAScript 2020はECMAScript言語仕様の第11版です。1997年の初版の発行以来、ECMAScriptは世界で最も広く使用されている汎用プログラミング言語の1つに成長しました。Webブラウザーに組み込まれた言語として最もよく知られていますが、サーバーおよび組み込みアプリケーションにも広く採用されています。

ECMAScriptは、JavaScript(Netscape)とJScript(Microsoft)などのテクノロジーに基づいて設計されています。この言語はNetscapeのBrendan Eichによって発明され、同社のNavigator 2.0ブラウザで最初に登場しました。Netscape以降のすべてのブラウザ、およびInternet Explorer 3.0以降のMicrosoftのすべてのブラウザで使用されています。

ECMAScript言語仕様の開発は1996年11月に始まりました。初版は、1997年6月のEcma総会で採用されました。

そのEcma規格は、ISO / IEC JTC 1に提出され、ファストトラック手順の下で採用され、1998年4月に国際規格ISO / IEC 16262として承認されました。1998年6月のEcma総会は、ECMA-262の第2版をISO / IEC 16262と完全に一致させるために承認しました。第1版と第2版の間の変更は、本質的に編集上のものです。

標準の第3版では、強力な正規表現、文字列処理の改善、新しい制御ステートメント、try / catch例外処理、エラーのより厳密な定義、数値出力のフォーマット、および将来の言語の拡大を見越した小さな変更が導入されました。ECMAScript標準の第3版は、1999年12月のEcma General Assemblyで採用され、2002年6月にISO / IEC 16262:2002として公開されました。

第3版の発行後、World Wide Webとの組み合わせで大規模な採用を達成し、本質的にすべてのWebブラウザーでサポートされるプログラミング言語になりました。ECMAScriptの第4版を開発するために重要な作業が行われました。ただし、その作業は完了しておらず、ECMAScriptの第4版として公開されていませんでしたが、その一部は第6版の開発に組み込まれました。

第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総会で採択されました。

2009年に第5版の発行準備を進めるのと同時に第6版に重点を置いた開発が開始されました。しかし、これに先立って、1999年の第3版の発行にさかのぼる重要な実験と言語強化の設計努力が行われました。非常に現実的な意味で、第6版の完成は15年の努力の集大成です。このエディションの目標には、大規模なアプリケーション、ライブラリの作成、およびECMAScriptを他の言語のコンパイルターゲットとして使用するためのより良いサポートを提供することが含まれていました。 その主な機能強化のいくつかには、モジュール、クラス宣言、レキシカルブロックのスコープ、イテレーターとジェネレーター、非同期プログラミングのPromise、パターンの構造化、適切な末尾再帰が含まれていました。組み込みのECMAScriptライブラリが拡張され、バイナリ数値のマップ、セット、配列を含む追加のデータ抽象化をサポートし、文字列および正規表現でのUnicode補足文字の追加サポートも提供します。ビルトインもサブクラス化によって拡張可能になりました。第6版は、定期的な段階的な言語およびライブラリの拡張機能の基盤を提供します。2015年6月の総会で第6版が採択されました。

ECMAScript 2016は、Ecma TC39の新しい年次リリースケイデンスとオープン開発プロセスの下でリリースされた最初のECMAScriptエディションです。プレーンテキストのソースドキュメントはECMAScript 2015ソースドキュメントから構築され、GitHubでのさらなる開発のベースとして機能します。この標準が開発された1年の間、何千ものバグ修正、編集上の修正、その他の改善を表す何百ものプルリクエストと問題が提出されました。さらに、この取り組みを支援するために、Ecmarkup、Ecmarkdown、Grammarkdownなどの多数のソフトウェアツールが開発されました。ES2016には、新しいべき乗演算子のサポートも含まれ、Array.prototypeincludesという新しいメソッドが追加されました。

ECMAScript 2017では、非同期関数、共有メモリ、アトミックが導入され、言語とライブラリの機能が強化され、バグが修正され、エディトリアルが更新されました。非同期関数は、プロミスリターン関数の構文を提供することにより、非同期プログラミングエクスペリエンスを向上させます。共有メモリとアトミックは、並列CPUでも明確に定義された実行順序を保証するアトミック操作を使用してマルチエージェントプログラムが通信できるようにする新しいメモリモデルを導入します。Object.valuesObject.entries、およびObject.getOwnPropertyDescriptorsの新しい静的メソッドも含まれています。

ECMAScript 2018では、AsyncIteratorプロトコルと非同期ジェネレーターによる非同期反復のサポートが導入されました。また、4つの新しい正規表現機能(dotAllフラグ、名前付きキャプチャグループ、Unicodeプロパティエスケープ、および後読みアサーション)も含まれていました。最後に、オブジェクトのレストとスプレッドのプロパティが含まれていました。

ECMAScript 2019は、いくつかの新しい組み込み関数を導入しました。配列をフラット化するためのArray.prototypeflatおよびflatMapObject.entriesの戻り値を新しいオブジェクトに直接変換するためのObject.fromEntriesString.prototypetrimStartおよびtrimEnd (これは広く実装されているが非標準のString.prototype.trimLeftおよびtrimRightビルトインの代替です)です。さらに、構文とセマンティクスに対するいくつかのマイナーな更新が含まれています。更新された構文には、オプションのキャッチバインディングパラメーターが含まれ、文字列リテラルのU+2028(LINE SEPARATOR)とU+2029(PARAGRAPH SEPARATOR)をJSONに合わせることができます。その他の更新には、Array.prototype.sortの安定化、JSON.stringifyが入力に関係なく整形式のUTF-8を返す、また、対応する元のソーステキストまたは標準のプレースホルダーを返すよう要求することで、Function.prototype.toStringを明確にします。

第11版であるこの仕様では、StringsにmatchAllメソッドを導入して、グローバル正規表現によって生成されたすべての一致オブジェクトのイテレータを生成しています。import()は動的指定子を使用してモジュールを非同期でインポートする構文です。BigIntは任意の精度の整数を扱うための新しい数値プリミティブです。Promise.allSettledは短絡しない新しいPromiseコンビネーターです。globalThisはプラットホームに関わらずグローバルthis値にアクセスするための普遍的な方法です。モジュール内で使用するための export * as ns from 'module' 構文、 for-in列挙順序の標準化の強化、モジュールに関するコンテキスト情報を含む、モジュールで使用可能なホスト設定オブジェクトであるimport.metaが追加されます。また、「nullish」値(nullまたはundefined)の処理を改善する2つの新しい構文機能、値選択演算子であるNullish Coalescing(Null合体?)と、プロパティアクセスおよび関数呼び出し時にアクセス/呼び出しする値がnullの場合に短絡する演算子であるオプショナルチェイニングを追加します。

多くの組織を代表する数十人の個人が、Ecma TC39内でこのエディションの開発と以前のエディションに非常に重要な貢献をしています。さらに、TC39のECMAScriptの取り組みをサポートする活気のあるコミュニティが登場しました。このコミュニティは、多数の下書きをレビューし、何千ものバグレポートを提出し、実装実験を行い、テストスイートに貢献し、ECMAScriptについて世界中の開発者コミュニティを教育しました。残念ながら、この取り組みに貢献したすべての個人や組織を特定して認めることは不可能です。

Allen Wirfs-Brock
ECMA-262, Project Editor, 6th Edition

Brian Terlson
ECMA-262, Project Editor, 7th through 10th Editions

Jordan Harband
ECMA-262, Project Editor, 10th through 11th Editions