ECMAScript (日本語)
ECMAScript仕様は、NetscapeのBrendan Eichによって開発されたスクリプト言語の標準化された仕様であり、最初はMocha、次にLiveScript、最後にJavaScriptという名前です。 1995年、サン-マイクロシステムズとNetscapeはプレスリリースでJavaScriptを発表した。 1996年、NetscapeはJavaScriptの標準化を進めるためのEcma国際標準化機構の会合を発表した。 ECMA-262の初版は1997年にEcma総会で採択された。 それ以来、言語標準のいくつかの版が出版されています。, “ECMAScript”という名前は、言語の標準化に関わる組織、特にNetscapeとMicrosoftの間の妥協であり、初期の標準セッションでは紛争が支配的でした。 Eichは”ECMAScriptは常に皮膚疾患のように聞こえる不要な商号でした。”ECMAScriptは、スタンフォード大学とインペリアル-カレッジ-ロンドンのセキュリティ分析と標準化のためのコンピューティング部門の仕事によって、運用意味論,
JavaScriptとJScriptの両方がECMAScript仕様に準拠しており、仕様に記載されていない追加機能も提供しています。
VersionsEdit
ECMA-262のエディションが公開されています。 標準のバージョン11の作業は2020年に完了しました。,
エディション | 公開日 | 名前 | 以前のエディションからの変更点 | エディタ | |||
---|---|---|---|---|---|---|---|
1 | june1997 | 初版 | ガイ-l-スティール-ジュニア,998 | 仕様をISO/IEC16262国際規格に完全に揃えるための編集変更 | Mike Cowlishaw | ||
3 | December1999 | 正規表現の追加、文字列処理の改善、新しい制御ステートメント、try/catch例外処理、エラーの定義の強化、数値出力のフォーマット、およびその他の機能強化 | Mikeカウリショー | ||||
4 | 放棄されました(last draft30june2003) | 第四版は、言語の複雑さに関する政治的な違いのために放棄されました。, 第四版のために提案された多くの機能は完全に削除され、いくつかは第六版に組み込まれました。 | |||||
5 | December2009 | より徹底的なエラーチェックを提供し、エラーが発生しやすい構造を避けることを目的としたサブセット”strict mode”を追加します。 第3版仕様の多くのあいまいさを明確にし、その仕様と一貫して異なる現実世界の実装の動作に対応しています。, Getterやsetter、JSONのライブラリサポート、オブジェクトプロパティのより完全なリフレクションなどの新機能が追加されました。 | Pratap Lakshman,Allen Wirfs-Brock | ||||
5.1 | June2011 | ECMAScript標準のこのエディション5.1は、国際標準ISO/IEC16262:2011の第三版と完全に一致しています。, | 第9版を参照–ECMAScript2018 | Brian Terlson | |||
10 | June2019 | ECMAScript2019(ES2019) | 第10版を参照–ECMAScript2019 | Brian Terlson,Bradley Farias,Jordan Harband | |||
11 | June2020 | Ecmascript2020(Es2020) | 第11版–ecmascript2020 | jordan harband,kevin smith |
2004年、Ecma InternationalはEcmascript for xml(e4x)として知られるecmascriptの拡張を定義するEcma-357標準を公開した。, Ecmaはまた、ES–CPまたはECMA327として知られるECMAScript用の”コンパクトなプロファイル”を定義しましたが、リソースに制約のあるデバイス用に設計されましたが、2015
第4版(放棄された)編集
提案されたECMA-262の第四版(ECMAScript4またはES4)は、1999年に第三版が出版されて以来、ECMAScriptの最初のメジャーアップデートであった。 この仕様は(リファレンス実装とともに)もともと2008年までに完了することを目標としていた。 最初のドラフトは1999年の日付であった。, この言語の概要は、October23,2007にワーキンググループによってリリースされました。
2008年までに、ECMAScript第4版の提案はECMAScript Harmonyというコードネームのプロジェクトにスケールバックされました。 当時のHarmonyについて議論されていた機能には、
- クラス、
- モジュールシステム、おそらく構造型システムを使用するオプションの型注釈と静的型付け、
- ジェネレータとイテレータ、
- 構造化代入、および
- 代数的データ型が含まれていた。,
これらの機能の意図は、部分的には大規模なプログラミングをより良くサポートし、パフォーマンスを向上させるためにスクリプトの動的な能力の一部を犠牲にすることを可能にすることでした。 たとえば、Adobeによって開発され、オープンソース化されたActionScript用の仮想マシンであるTamarinは、特定のクラスのスクリプトに対してjust–in-time compilation(JIT)をサポートしています。
新機能の導入に加えて、いくつかのES3のバグは、エディション4で修正されることが提案されました。 これらの修正およびその他、およびJSONエンコード/デコードのサポートは、ECMAScript、5th Edition仕様に折り畳まれています。,
Es-CP(Compact Profile)仕様が完成した後、エディション4で作業が始まり、約18ヶ月間続き、NetscapeのJavaScript2仕様の理論とMicrosoftのJScript.NETの実装経験とのバランスが遅くなり、しばらくしてECMAScript for XML(E4X)標準に焦点が移った。 更新は論争なしではありませんでした。 2007年後半、Mozilla FoundationのCTOであるEichと、MicrosoftのInternet ExplorerのプラットフォームアーキテクトであるChris Wilsonの間の議論が、いくつかのブログで公開されました。, Wilson氏は、提案されたECMAScriptの変更により、以前のバージョンの言語といくつかの点で後方互換性がなくなったため、更新は”Webを壊す”ことになり、変更に反対する利害関係者は”見えない”ことになっていると警告した。 アイヒは、ウィルソンが”ブログで虚偽を繰り返している”ように見えると述べ、反対意見を抑制しようとする試みがあることを否定し、非互換性の具体的な例を与えるために批評家に挑戦した。, 彼は、Microsoft SilverlightとAdobe AIRはそれぞれC#とActionScript3に依存しており、どちらもECMAScript Edition3よりも大きく複雑であることを指摘しました。
第5版編集
Yahoo、Microsoft、Google、およびその他の第4版の反対者は、ecmascript3のあまり野心的でない更新を設計するために独自の小委員会を結成し、仮称ECMAScript3.1と この版がリティとセキュリティ、図書室、多重に対応しています。 前述のパブリックスパーリングの後、ECMAScript3。,1とECMAScript4チームは妥協に合意しました:二つのエディションは、ECMAScript3.1がセマンティクスと構文の両方においてECMAScript4の厳密なサブセットのままであることを確認するために、チーム間の調整と並行して作業されることになります。
しかし、各チームの哲学の違いにより、サブセットルールが繰り返され、ECMAScript4の反対者が将来ECMAScript4をサポートまたは実装することは疑わしいままでした。, Ecma技術委員会39内でECMAScriptの将来に関する意見の不一致から一年以上経った後、両チームは2008年に新たな妥協に達し、Brendan EichはEcma TC39がECMAScript3.1(後にECMAScript、5th Editionに改名)プロジェクトに注力すると発表し、ベンダーは2009年初めまでに少なくとも二つのinteroper用可能な実装をターゲットにすると発表した。 2009年、Ecma TC39は第5版の”最終”ドラフトを発表し、interoper用可能な実装のテストは月中旬までに完了する予定であると発表した。, 3月、2009年にECMA-262第5版が出版された。
第6版-ECMAScript2015Edit
第6版は、当初はECMAScript6(ES6)として知られ、後にECMAScript2015に改名され、2015年に完成しました。 この更新により、クラス宣言(class Foo { ... }
)、import * as moduleName from "..."; export const Foo
のようなES6モジュールなど、複雑なアプリケーションを記述するための重要な新しい構文が追加されましたが、ECMAScript5strictモードと同じ用語で意味的に定義されています。, その他の新機能には、イテレータとfor...of
ループ、Pythonスタイルのジェネレータ、矢印関数式(() => {...}
)、let
ローカル宣言のキーワード、const
定数ローカル宣言のキーワード、バイナリデータ、型付き配列、新しいコレクション(マップ、セット、WeakMap)、約束、数、数学拡張、リフレクション、プロキシ(仮想オブジェクトとラッパーのメタプログラミング)、文字列のテンプレートリテラル。 完全なリストは広範囲です。, 最初の”ECMAScript Harmony”仕様として、”ES6Harmony”とも呼ばれています。”
第7版-ECMAScript2016Edit
第7版は、正式にECMAScript2016として知られていますが、2016年に完成しました。 その機能には、変数と関数のブロックスコープ、(変数の)構造化パターン、適切なテールコール、数値のべき乗演算子**
、await
、async
非同期プログラミングのためのキーワード、配列が含まれます。プロトタイプ。コード>関数が含まれています。,
べき乗演算子は、数学と同等です。pow
ですが、Python、F#、Perl、Rubyなどの言語に似たより単純な構文を提供します。async
/await
promisesを使用して非同期コードを開発する簡単な方法として歓迎されました。
第8版-ECMAScript2017Edit
第8版は、正式にはECMAScript2017として知られていますが、2017年に完成しました。 その機能には、オブジェクトが含まれます。値
,オブジェクト。,エントリ
およびオブジェクト。getOwnPropertyDescriptors
オブジェクトを簡単に操作するための関数、async/await
ジェネレータと約束を使用する構造、並行性とアトミックのための追加機能。
第9版-ECMAScript2018Edit
第9版は、正式にはECMAScript2018として知られており、2018年に完成しました。 新しい機能には、オブジェクトリテラルのrest/spread演算子(...identifier
)、非同期反復、Promise.prototype.finally
、RegExpへの追加が含まれます。,
spread演算子を使用すると、以下に示すように、オブジェクトプロパティを簡単にコピーできます。
第10版-ECMAScript2019Edit
第10版は、正式にはECMAScript2019として知られており、2019年に公開されました。 追加された機能には、Array.prototype.flat
、Array.prototype.flatMap
、Array.sort
およびObject.fromEntries
への変更が含まれますが、これらに限定されません。
配列。sort
は安定していることが保証され、同じ並べ替え優先順位を持つ要素が並べ替えられた配列内で同じ順序で表示されることを意味します。, Array.prototype.flat(depth=1)
配列を指定された深さにフラット化します。
第11版-ECMAScript2020Edit
第11版は、正式にはECMAScript2020として知られており、2020年に公開されました。 新しい関数に加えて、このバージョンには、任意のサイズの整数のためのBigInt
プリミティブ型、nullish合体演算子、およびglobalThisオブジェクトが含ま,
Bigintは、BigInt
コンストラクタまたは構文10n
のいずれかで作成されます。”n”は数値リテラルの後に配置されます。 BigIntsでは、数値を超える整数の表現と操作が可能です。MAX_SAFE_INTEGER
、数値は倍精度64ビットIEEE754値で表されます。, たとえば、Bigintの累乗は、Mathではなく、
**
演算子で行う必要があります。Mathではなく、
。の組み込み関数はBigintと互換性がありません。pow
ヌルリッシュ合体演算子、??
は、左側がnull
またはundefined
の場合、右側のオペランドを返します。, これは、すべての例に対して”string”を返す||
演算子とは対照的です。
false ?? "string" // -> falseNaN ?? "string" // -> NaNundefined ?? "string" // -> "string"
オプションの連鎖を使用すると、各レベルでチェックを行うことなく、オブジェクト内のネストされたノードにアクセスできます。
例はconst zipcode=personですか?.アドレスは?.郵便番号
。 いずれかのプロパティが存在しない場合、zipcode
はundefined
になります。
ES.NextEdit
ES.,Nextは、次のバージョンが執筆時点であるものを参照する動的な名前です。 エス次の機能は、批准された仕様の一部ではないfinished proposalに記載されているfinished proposal(別名”ステージ4proposal”)です。 言語委員会は”生きている仕様”モデルに従っているので、これらの変更は標準の一部であり、批准は正式なものです。