ECMAScript

ECMAScript（エクマスクリプト）は、Ecmaインターナショナルにおいて標準化されたJavaScriptの国際規格である。また、ISO/IEC JTC 1においてはISO/IEC 22275:2018、日本産業規格においてはJIS X 3060:2000として規格化されている。


バージョン

ECMAScript仕様は、Ecma InternationalにてECMA-262という規格番号で標準化されている。改訂にあたっては版 (edition) が更新されている。

6th editionから、「ECMAScript 2015」仕様の名称に発行年が付加されることになった。以降、ECMAScriptは毎年改訂されることになり、以降特定の版を指す場合は、edition名ではなく年号つきの仕様書名で呼ばれることが推奨されている。

Edition公開日以前のバージョンとの違い編集者11997年6月初版Guy L. Steele, Jr.21998年6月Editionとしての仕様はそのままであり、ISO/IEC 16262 international standardに完全な対応をしたMike Cowlishaw31999年12月正規表現、よりよい文字列の取り扱い、新しいコントロール構文、try/catch例外処理、より厳格なエラー処理、数字のその他の書式化フォーマットMike Cowlishaw4放棄4th Editionは放棄された。言語の複雑化に関する政治的な差異による。いくつかの成果は5thの基礎として採用され、いくつかは6thの基礎となっている。52009年12月"strictモード"、初期化時に発生しがちなエラーを回避するための追加仕様の追加。多くの曖昧な部分、および仕様に準拠しつつも現実世界の実装の融通の利く振る舞いを明確にした。いくらかの新機能、getterやsetter、JSONライブラリのサポート、より完全なオブジェクトの属性のリフレクションJavaScriptの変更, Part 1: EcmaScript 5 Pratap Lakshman, Allen Wirfs-Brock 5.1 2011年6月ECMAScript Language Specification - ECMA-262 Edition 5.1 ISO/IEC 16262:2011規格と同様の表記に修正 Pratap Lakshman, Allen Wirfs-Brock6 (2015)2015年6月クラス、モジュール、イテレータ、for/ofループ、Pythonスタイルのジェネレータ、アロー関数、2進数および8進数の整数リテラル、Map、Set、WeakMap、WeakSet、プロキシ、テンプレート文字列、let、const、型付き配列、デフォルト引数、Symbol、Promise、分割代入、可変長引数Allen Wirfs-Brock7 (2016)2016年6月冪乗演算子、Array.prototype.includesBrian Terlson8 (2017)2017年6月非同期関数 (async/await)、SharedArrayBufferとAtomics、String.padStart/padEnd、Object.values/entries、Object.getOwnPropertyDescriptors、関数の引数における末尾のカンマ許容9 (2018)2018年6月オブジェクトに対するスプレッド構文、非同期イテレーション、Promise.prototype.finally、正規表現への機能追加 Brian Terlson10 (2019)2019年6月Array.prototype.flat/flatMap、Object.fromEntries、String.prototype.trimStart/trimEndメソッドの追加。catchブロックの引数省略を許可。他Brian Terlson, Bradley Farias, Jordan Harband11 (2020)2020年6月オプショナルチェイニング演算子?.、Null合体演算子??サポート。BigInt型の追加。動的importサポート。for-in文の順序保証。他Jordan Harband, Kevin Smith 12 (2021) 2021年6月 String.prototype.replaceAllメソッド追加。Promise.any追加。??=、&&=、||= 演算子追加。数値の区切り文字としてのアンダースコア _サポート。弱い参照WeakRefサポート。 Jordan Harband, Shu-yu Guo, Michael Ficarra, Kevin Gibbons 13 (2022) 2022年6月 Array、String、TypedArrayに対して負数指定可能なatメソッド追加。静的クラスフィールドサポート。プライベートフィールド/メソッドサポート。トップレベルawaitサポート。 Shu-yu Guo, Michael Ficarra, Kevin Gibbons 14 (2023) 2023年6月ECMAScript 2023 Language Specification 配列操作メソッドの追加、#!（シバン (Unix)）のサポート、WeakMapのキーにおけるSymbolの利用。 Shu-yu Guo, Michael Ficarra, Kevin Gibbons

ECMAScriptにはいくつかの拡張が存在する。

 ECMA-357 (ECMAScript for XML) - 2004年公開、E4Xとして知られる
 ECMA-402（国際化API） - 2012年公開
 ECMA-404 (JSON) - 2013年公開

EcmaはECMAScriptのための "Compact Profile" も定義した — ES-CP、あるいはECMA 327として知られる — リソースの厳しいデバイス用にデザインされている。ECMAScriptのいくつかの動的な機能(『eval』関数など)はオプションにされている。これにより、処理系はプログラムの振る舞いに対してより多くの仮定ができるようになり、その結果、より良いパフォーマンス・トレードオフを実行時に得ることができるようになる。
HD DVD standardはECMAScript Compact Profileに準拠し、完全なECMAScriptの支援をより少ないメモリのデバイスで実行できるよう採用している。

 文法 

 方言およびその呼称 
ECMAScript は、ウェブブラウザをはじめとする多くのアプリケーションでサポートされている。DOMとの連携はドキュメントの操作を可能にする。

アプリケーション呼称最新バージョン対応するECMAScriptリビジョンMozillaおよびその派生品JavaScript1.8.5ECMA-262 5.1 editionECMA-357 Internet ExplorerJScript（IE8まで）5.8ECMA-262 3rd editionJavaScript (Chakra)11.0ECMA-262 5.1 editionGoogle ChromeOperaJavaScriptECMA-262 5.1 editionSafari (JSCore)JavaScriptECMA-262 5.1 editionKonqueror (KJS)JavaScriptECMA-262 3rd editioniCabInScriptECMA-262 3rd editionMicrosoft .NETJScript .NET10.0ECMA-262 4th草案Adobe FlashActionScript3ECMA-262 4th草案ECMA-357Adobe AcrobatJavaScript1.5ECMA-262 3rd editionAdobe Creative SuiteExtendScriptECMA-262 3rd editionDMDScriptDMDScriptECMA-262 3rd editionQtQtScriptECMA-262 3rd editionMax/MSPJavaScript1.5ECMA-262 3rd edition

 ECMAScript 4 

ECMAScript 4は過去2回仕様作成が挑戦されたが、仕様がまとまらず、失敗に終わっている。

 1回目 
2000年〜2003年ごろ行われた。主に、旧Netscape社とマイクロソフトによって行われたが、意見がまとまらずに、打ち切りとなった。この時の案はActionScriptへと引き継がれた。

 2回目 
2007年〜2008年ごろ、2回目の仕様作成が行われた。大きく機能を追加される予定であったが、意見がまとまらず、2008年8月13日に、小規模の改善にとどまる、ECMAScript 3.1を進めることとなった。

以下のような予定があった。
 大規模・大人数開発のための機能の追加
 型に関する機能の追加
 ジェネリックプログラミングの機能の追加
 ECMAScript 3 が下位互換だが、互換でない仕様が一部に入る
 ActionScript 3 の上位互換だが、互換でない仕様が一部に入る

 実装 
 V8 - C++ - Google Chromeブラウザで使われている
 Rhino (Rhino) - Java
 Narcissus - JavaScript
 SpiderMonkey (SpiderMonkey) - C - Firefox/Mozillaブラウザで使われている
 KJS - C++ - KDEのKonquerorブラウザで使われている
 JavaScriptCore - C++ - MAC OS XのSafariブラウザやdashboardで使われている。KJSベース
 NJS - C
 SEE - Simple ECMAScript Engine - C
 ixlib - C++
 QSA - Qt Script for Applications - C++
 DMDScript - C++/D
 DMonkey - Delphi
 FESI - Free EcmaScript Interpreter - Java
 Scriptonite - Java
 xwt - Java
 JANET - Java
 Epimetheus - C++ - Mozillaプロジェクトによる以前のECMAScript Edition 4草案の実装

 脚注 

 注釈 

 出典 

 関連項目 
 ECMAScript for XML (E4X)
 JavaScript Object Notation (JSON)
 CommonJS
 TypeScript: JavaScriptの構文を保ちつつ、型に関する機能を外部的に追加したプログラミング言語

 外部リンク 

 ECMAScript
 ECMAScript言語仕様
 Standard ECMA-262
 ECMA-262 ECMAScript Language Specification 3rd edition (December 1999)
 ECMA-262 ECMAScript Language Specification 5th edition (December 2009)
 ECMA-262 ECMAScript Language Specification 5.1 edition (June 2011)
 Standard ECMA-262 6th Edition / June 2015 ECMAScript 2015 Language Specification
 Standard ECMA-262 12th Edition / June 2015 ECMAScript 2021 Language Specification
 The most accurate and up-to-date ECMAScript Language Specification
 Standard ECMA-290 ECMAScript Components Specification (June 1999)
 Standard ECMA-327 ECMAScript 3rd Edition Compact Profile (June 2001)
 Under Translation of ECMA-262 3rd Edition(日本語訳)

*
Category:スクリプト言語
Category:Ecma