ECMAScript
| パラダイム | 
関数型プログラミング、マルチパラダイムプログラミング、プロトタイプベース、命令型プログラミング  | 
|---|---|
| 登場時期 | 1997年 | 
| 開発者 | 
ブレンダン・アイク  | 
| 最新リリース | ECMA-262 14th Edition (ECMAScript 2023)[1]/ 2023年6月 | 
| 型付け | ダック・タイピング、弱い動的型付け | 
| 方言 | JavaScript, ActionScript, JScript, QtScript, DMDScript, InScript | 
| 影響を受けた言語 | 
Self、HyperTalk、AWK、C言語、CoffeeScript、Perl、Python、Java、Scheme  | 
| ウェブサイト | 
ecma-international | 
| 拡張子 | 
es  | 
![]()  | |
| 拡張子 | 
.es | 
|---|---|
| MIMEタイプ | text/javascript[注 1] | 
| 開発者 | 
サン・マイクロシステムズ Ecma International  | 
| 初版 | 1997年6月 | 
| 最新版 | 
 14th Edition (ECMAScript 2023) (2023年6月)  | 
| 種別 | スクリプト言語 | 
| 派生元 | JavaScript | 
| ウェブサイト | |
ECMAScript(エクマスクリプト)は、Ecmaインターナショナルにおいて標準化されたJavaScriptの国際規格である。また、ISO/IEC JTC 1においてはISO/IEC 22275:2018[注 2]、日本産業規格においてはJIS X 3060:2000として規格化されている[注 3][2]。
バージョン
[編集]この節は更新が必要とされています。  (2022年3月)  | 
ECMAScript仕様は、Ecma InternationalにてECMA-262という規格番号で標準化されている。改訂にあたっては版 (edition) が更新されている。
6th editionから、「ECMAScript 2015」仕様の名称に発行年が付加されることになった。以降、ECMAScriptは毎年改訂されることになり、以降特定の版を指す場合は、edition名ではなく年号つきの仕様書名で呼ばれることが推奨されている[3]。
| Edition | 公開日 | 以前のバージョンとの違い | 編集者 | 
|---|---|---|---|
| 1 | 1997年6月 | 初版 | Guy L. Steele, Jr. | 
| 2 | 1998年6月 | Editionとしての仕様はそのままであり、ISO/IEC 16262 international standardに完全な対応をした | Mike Cowlishaw | 
| 3 | 1999年12月 | 正規表現、よりよい文字列の取り扱い、新しいコントロール構文、try/catch例外処理、より厳格なエラー処理、数字のその他の書式化フォーマット | Mike Cowlishaw | 
| 4 | 放棄 | 4th Editionは放棄された。言語の複雑化に関する政治的な差異による。いくつかの成果は5thの基礎として採用され、いくつかは6thの基礎となっている。 | |
| 5 | 2009年12月 | "strictモード"、初期化時に発生しがちなエラーを回避するための追加仕様の追加。多くの曖昧な部分、および仕様に準拠しつつも現実世界の実装の融通の利く振る舞いを明確にした。いくらかの新機能、getterやsetter、JSONライブラリのサポート、より完全なオブジェクトの属性のリフレクション[4] | Pratap Lakshman, Allen Wirfs-Brock | 
| 5.1 | 2011年6月[5] | ISO/IEC 16262:2011規格と同様の表記に修正 | Pratap Lakshman, Allen Wirfs-Brock | 
| 6 (2015) | 2015年6月[6] | クラス、モジュール、イテレータ、for/ofループ、Pythonスタイルのジェネレータ、アロー関数、2進数および8進数の整数リテラル、Map、Set、WeakMap、WeakSet、プロキシ、テンプレート文字列、let、const、型付き配列、デフォルト引数、Symbol、Promise、分割代入、可変長引数 | Allen Wirfs-Brock | 
| 7 (2016) | 2016年6月[7] | 冪乗演算子、Array.prototype.includes | Brian Terlson | 
| 8 (2017) | 2017年6月[8] | 非同期関数 (async/await)、SharedArrayBufferとAtomics、String.padStart/padEnd、Object.values/entries、Object.getOwnPropertyDescriptors、関数の引数における末尾のカンマ許容 | |
| 9 (2018) | 2018年6月[9] | オブジェクトに対するスプレッド構文、非同期イテレーション、Promise.prototype.finally、正規表現への機能追加 | Brian Terlson | 
| 10 (2019) | 2019年6月[10] | Array.prototype.flat/flatMap、Object.fromEntries、String.prototype.trimStart/trimEndメソッドの追加。catchブロックの引数省略を許可。他 | Brian Terlson, Bradley Farias, Jordan Harband | 
| 11 (2020) | 2020年6月[11] | オプショナルチェイニング演算子?.、Null合体演算子??サポート。BigInt型の追加。動的importサポート。for-in文の順序保証。他
 | 
Jordan Harband, Kevin Smith | 
| 12 (2021) | 2021年6月[12] | String.prototype.replaceAllメソッド追加。Promise.any追加。??=、&&=、||= 演算子追加。数値の区切り文字としてのアンダースコア _サポート。弱い参照WeakRefサポート。
 | 
Jordan Harband, Shu-yu Guo, Michael Ficarra, Kevin Gibbons | 
| 13 (2022) | 2022年6月[13] | Array、String、TypedArrayに対して負数指定可能なatメソッド追加。静的クラスフィールドサポート。プライベートフィールド/メソッドサポート。トップレベルawaitサポート。 | Shu-yu Guo, Michael Ficarra, Kevin Gibbons | 
| 14 (2023) | 2023年6月[14] | 配列操作メソッドの追加、#!(シバン (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およびその派生品 | JavaScript | 1.8.5 | ECMA-262 5.1 edition ECMA-357[注 4]  | 
| Internet Explorer | JScript(IE8まで) | 5.8 | ECMA-262 3rd edition | 
| JavaScript (Chakra) | 11.0 | ECMA-262 5.1 edition | |
| Google Chrome Opera  | 
JavaScript | ECMA-262 5.1 edition | |
| Safari (JSCore) | JavaScript | ECMA-262 5.1 edition | |
| Konqueror (KJS) | JavaScript | ECMA-262 3rd edition | |
| iCab | InScript | ECMA-262 3rd edition | |
| Microsoft .NET | JScript .NET | 10.0 | ECMA-262 4th草案[注 5] | 
| Adobe Flash | ActionScript | 3 | ECMA-262 4th草案[注 6] ECMA-357  | 
| Adobe Acrobat | JavaScript | 1.5 | ECMA-262 3rd edition | 
| Adobe Creative Suite | ExtendScript | ECMA-262 3rd edition | |
| DMDScript | DMDScript | ECMA-262 3rd edition | |
| Qt | QtScript | ECMA-262 3rd edition | |
| Max/MSP | JavaScript | 1.5 | ECMA-262 3rd edition | 
ECMAScript 4
[編集]ECMAScript 4は過去2回仕様作成が挑戦されたが、仕様がまとまらず、失敗に終わっている。
1回目
[編集]2000年〜2003年ごろ行われた。主に、旧Netscape社[15]とマイクロソフトによって行われたが、意見がまとまらずに、打ち切りとなった。この時の案はActionScriptへと引き継がれた。
2回目
[編集]2007年〜2008年ごろ、2回目の仕様作成が行われた。大きく機能を追加される予定であったが、意見がまとまらず、2008年8月13日に、小規模の改善にとどまる、ECMAScript 3.1を進めることとなった[16][注 7]。
以下のような予定があった。
- 大規模・大人数開発のための機能の追加[要出典]
 - 型に関する機能の追加[要出典]
 - ジェネリックプログラミングの機能の追加
 - 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草案の実装
 
脚注
[編集]注釈
[編集]- ^ 過去には RFC 4329 で「application/ecmascript」とされていたが、互換性のために RFC 9239 で廃止(OBSOLETE)され「text/javascript」に統一された。
 - ^ ISO/IEC 16262は、ISO/IEC 16262:1998→ISO/IEC 16262:2002→ISO/IEC 16262:2011と改訂されてきたが、2021年8月時点の最新のISO/IEC 22275:2018 Information technology — Programming languages, their environments, and system software interfaces — * ECMAScript Specification Suiteとして、
- ECMA-262, ECMAScript Language Specification
 - ECMA-402, ECMAScript Internationalization API Specification
 - ISO/IEC 21778, Information technology — The JSON data interchange syntax (Adoption of ECMA-404)
 
 - ^ JIS X 3060:2000は、ISO/IEC 16262:1998(ES1相当)の日本語訳。
 - ^ Mozillaは1.8 Beta 1以降でE4Xをサポートしている。
 - ^ 2001年頃のマイクロソフトの草案であり、独自に開発を進めたもので、現在のECMAScript 4草案とは大きく異なる。
 - ^ 2001年頃のNetscapeの草案に近く、現在のECMAScript 4草案のサブセットに近い。
 - ^ 仕様は、http://www.ecmascript.org/docs.php にて公開されている。
 
出典
[編集]- ^ “ECMA-262. ECMAScript® 2023 language specification. 14th edition, June 2023” (英語). Ecmaインターナショナル (2023年6月). 2024年3月19日閲覧。
 - ^ “JIS X 3060:2000, ECMAScript言語, Information technology -- ECMAScript language specification” (2000年6月30日). 2021年8月16日閲覧。 “対応国際規格:ISO/IEC 16262:1998 (IDT); IDT=identical(一致)”
 - ^ “Some ECMAScript Explanations and Stories for Dave” (英語). wirfs-brock.com (2017年8月31日). 2025年1月14日閲覧。
 - ^ JavaScriptの変更, Part 1: EcmaScript 5
 - ^ ECMAScript Language Specification - ECMA-262 Edition 5.1
 - ^ “ECMAScript 2015 Language Specification – ECMA-262 6th Edition”. 2025年3月17日閲覧。
 - ^ “ECMAScript® 2016 Language Specification”. 2025年3月17日閲覧。
 - ^ “ECMAScript® 2017 Language Specification”. 2025年3月17日閲覧。
 - ^ “ECMAScript® 2018 Language Specification”. 2025年3月17日閲覧。
 - ^ “ECMAScript® 2020 Language Specification”. 2025年3月17日閲覧。
 - ^ “ECMAScript® 2020 Language Specification”. 2025年3月17日閲覧。
 - ^ “ECMAScript® 2021 Language Specification”. 2025年3月17日閲覧。
 - ^ “ECMAScript® 2022 Language Specification”. 2025年3月17日閲覧。
 - ^ ECMAScript 2023 Language Specification
 - ^ “ECMAScript 4 Netscape Proposal”. www-archive.mozilla.org (2003年6月30日). 2025年1月14日閲覧。
 - ^ “ECMAScript Harmony”. esdiscuss.org (2008年8月13日). 2025年1月14日閲覧。
 
関連項目
[編集]- 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(日本語訳)
 
 - Standard ECMA-262
 
