ECMAScript
読み:えくま-すくりぷと
外語:ECMAScript
Netscape Communications
が開発したスクリプト言語
JavaScript
を、
Ecma International
が標準化したもの。ECMA-262。
目次
概要
特徴
規格
由来
ECMA TC39
バージョン
概要
枠組み ‐ マルチパラダイム(プロトタイプベース、関数型、命令型、
オブジェクト指向
など)
初出年 ‐ 1997(平成9)年
設計者 ‐ ブレンダン・アイク (Brendan Eich)
開発者 ‐ Ecma International
最新版 ‐ ECMA-262 14th Edition (ECMAScript 2023)
言語影響関係
被影響 ‐
JavaScript
(
C
、
Java
、
Perl
、
Python
、
Scheme
、Self)
加影響 ‐ 不明
主要動作環境 ‐ クロスプラットフォーム
特徴
規格
ECMA以外にISO/IECやJISでも標準化されている。
ECMA-262
ISO/IEC 16262
JIS X 3060
由来
元々は
Netscape Navigator
用に開発された、Webブラウザー用のスクリプト言語が
JavaScript
である。言語としての具体的な仕様は
JavaScript
を参照のこと。
後に
Internet Explorer
にも同等品が搭載されたが、相互に非互換があり、どちらか一方でしか動かないという問題を生んだため、スクリプトの標準化が行なわれた。こうして作られたのが標準化されたJavaScriptが「ECMAScript」である。
4th editionあたりでは一度は紛糾したが、その仕様変更を部分的に導入した5th、6thは無事に策定され、6th以降は策定された西暦年を冠するようになり、毎年6月に新しい版が公開されている。
元々のJavaScriptをNetscape Navigatorから引き継いだMozilla Firefoxも今ではECMAScriptに切り替わっており、かくして現在「JavaScript」と呼ばれて使われている言語は、実際は例外なく「ECMAScript」である。
ECMA TC39
上記のような経緯により、現在JavaScriptと呼ばれるものはECMAScriptであり、Ecma Internationalの技術委員会(technical committee)であるTC39によって管理されている。
紆余曲折の末、6th editionとも呼ばれる2015(平成27)年6月リリースの版(ECMAScript 2015)以降は、毎年6月に新板が公開されている。
仕様は年1回の更新だが、その仕様はそれより前にGoogle ChromeやMozilla Firefoxなどに実装されるため、Safariという残念を無視すれば仕様が公開される頃には最新の仕様が使えることが多い。
バージョン
1st edition (ECMAScript 1.0) 1997(平成9)年6月 初版。JavaScript 1.1ベース。
2nd edition (ECMAScript 2.0) 1998(平成10)年6月 言語仕様に変更はないが、ISO/IEC 16262がリリースされたため、ISOへの準拠。
3rd edition (ECMAScript 3.0) 1999(平成11)年12月 JavaScript 1.3相当。
正規表現、文字コードの扱いのUnicode化、try/catch例外処理構文の導入など。
4th edition (ECMAScript 4.0)
議論が紛糾し、策定されることなく放棄された。
Adobe、Mozillaなどの陣営は4th editionを推したが、大幅な
仕様変更
となるためMicrosoft、Yahoo!などの陣営と対立、最終的に標準化は断念された。
このうちのいくつかは後継の5th editionの基礎となり、また別の幾つかはその次6th edition(コードネームECMAScript Harmony)の基礎となった。
5th edition (ECMAScript 5.0) 2009(平成21)年12月 「strictモード」として、仕様が曖昧な部分で起こりうるエラーを回避するための追加仕様を導入した。
getter/setter機能、JSONライブラリーのサポートなどを追加。
5.1th edition (ECMAScript 5.1) 2011(平成23)年6月
6th edition (ECMAScript 2015) 2015(平成27)年6月 JavaScript 1.7〜1.8相当の仕様を導入。
これ以降、従来と大幅に言語仕様が変更されている。互換性は維持しつつも、JavaScriptの根本的な設計ミスを少しでも改善し、同時に最先端の言語にしていこうという努力がつぎ込まれている。
class、Modules、iterator、Generator、for...of構文ループ、Map、WeakMap、Set、WeakSet、アロー関数、テンプレートリテラル(テンプレート文字列)、Symbol、Promise。Proxyオブジェクトといった昨今のプログラミング言語でのトレンドが導入された。
変数まわりも大きく変化しており、
var
に代わる新仕様として
let
と
const
が導入されたことが目立つほか、型付き配列、分割代入、関数の可変長引数などが可能になり、2進数および新しい8進数の整数リテラル(0bおよび0o)に対応した。
7th edition (ECMAScript 2016) 2016(平成28)年6月 ECMAScript 2015のバグ修正が主だが、新機能として、Array.prototype.includesと
冪乗
(累乗)演算子 ** が導入されている。
8th edition (ECMAScript 2017) 2017(平成29)年6月 Object.values()とObject.entries()、非同期関数(async/await)などが導入された。
9th edition (ECMAScript 2018) 2018(平成30)年6月 スプレッド構文、Async Iteration(非同期イテレーション)などの導入。
10th edition (ECMAScript 2019) 2019(令和元)年6月 Array.prototype.flat()メソッドおよびflatMap()メソッド、Object.fromEntries()メソッドなどの導入。
11th edition (ECMAScript 2020) 2020(令和2)年6月 オプショナルチェイニング(Optional chaining)演算子、いわゆる
null条件演算子
?.
と、
null合体演算子
?? の追加。具体的な仕様は他の近代的な言語と同様である。
BigIntオブジェクトの追加など。
12th edition (ECMAScript 2021) 2021(令和3)年6月 大きな数値を_区切りで書けるようになった(10進数だけでなく16進数なども可)。
String.prototype.replaceAll()、Promise.any()、弱参照を生成するWeakRefsの追加。
??=、||=、\&=演算子の追加。a??=bはaがundefinedの場合にaにbを代入する演算子である。
13th edition (ECMAScript 2022) 2022(令和4)年6月 Array、String、TypedArray に .at() メソッドの追加(配列記号[}と同様の機能だが、負の整数を指定すると末尾からの参照機能が使える)。
ES2017で追加された非同期関数(async/await)の改良。トップレベルに限り、ラッパーとしてのasync関数なしでもawaitが使えるようになった。
ES2015で追加されたclassの改良。プライベートのメソッドやフィールドを作成可能となった(プライベートなものは接頭辞として#を付ける。宣言だけでなく使用時にも#が必要)。静的フィールドのためのstaticを追加。
Object.prototype.hasOwnProperty.call()と同様の機能を持つObject.hasOwn()メソッド、Error.cause、正規表現にマッチインデックス機能(/dフラグ)の追加。
14th edition (ECMAScript 2023) 2023(令和5)年6月 配列の非破壊操作メソッド(toSorted(), toReversed()、toSpliced()、with())の追加。
Arrayを後ろから検索するメソッド(findLast()、findLastIndex())の追加。
再検索