ECMAScript は、 Ecma Internationalが開発した JavaScript 標準です。2015 年以降、毎年 6 月にメジャーバージョンが公開されています。
15番目で現在のバージョンであるECMAScript 2024は、2024年6月にリリースされました。
バージョン
2004年6月、Ecma InternationalはECMA-357標準を公開し、ECMAScriptの拡張機能であるECMAScript for XML (E4X)を定義しました。また、Ecmaは、リソースが制限されたデバイス向けに設計されたECMAScriptの「コンパクトプロファイル」(ES-CP、またはECMA 327)も定義しましたが、これは2015年に撤回されました。[14]
第4版(廃版)
ECMA-262の第4版( ECMAScript 4またはES4 )の提案は、1999年に第3版が発行されて以来、ECMAScriptの最初のメジャーアップデートとなるはずでした。仕様(および参照実装)は、当初2008年10月までに完成する予定でした。[15]最初のドラフトは1999年2月に作成されました。[16]言語の概要は、2007年10月23日にワーキンググループによってリリースされました。[17]
2008 年 8 月までに、ECMAScript 第 4 版の提案は、ECMAScript Harmony というコード名のプロジェクトに縮小されました。当時、Harmony で議論されていた機能には次のものがありました。
これらの機能の目的は、大規模な でのプログラミングをより適切にサポートし、スクリプトの動的機能をある程度犠牲にしてパフォーマンスを向上させることです。たとえば、Adobe が開発しオープンソース化した ActionScript の仮想マシンであるTamarin は、特定のクラスのスクリプトに対してジャストインタイム コンパイル(JIT) をサポートしています。
新しい機能の導入に加えて、いくつかのES3のバグを第4版で修正することが提案されました。 [18] [19]これらの修正とその他の修正、およびJSONエンコード/デコードのサポートは、ECMAScript第5版仕様に組み込まれました。[20]
ES-CP (Compact Profile) 仕様が完成した後に Edition 4 の作業が開始され、約 18 か月間続けられ、Netscape の JavaScript 2 仕様の理論と Microsoft の JScript .NET の実装経験とのバランスを取りながらゆっくりと進展が見られました。しばらくして、焦点はECMAScript for XML (E4X) 標準に移りました。この更新は論争を呼ばなかったわけではありません。2007 年後半、後にMozilla Foundationの CTO となる Eich と、MicrosoftのInternet Explorerのプラットフォーム アーキテクトである Chris Wilson の間の議論が、いくつかのブログで公開されました。Wilson は、ECMAScript への提案された変更により、いくつかの点で以前のバージョンの言語との下位互換性がなくなるため、この更新は「Web を破壊する」ことになり、[21]変更に反対する利害関係者は「隠されている」と警告しました。[22]アイクはウィルソンが「ブログで虚偽を繰り返している」ようだと述べ、反対意見を抑圧しようとしたことを否定し、批評家らに非互換性の具体的な例を挙げるよう要求した。[23]彼は、 Microsoft SilverlightとAdobe AIRはそれぞれC#とActionScript 3に依存しており、どちらもECMAScript Edition 3よりも大きく複雑であると指摘した。[24]
第 5 版 – ECMAScript 2009
Yahoo、Microsoft、Google、およびその他の第 4 版反対派は、ECMAScript 3 の野心的でないアップデートを設計するための独自の小委員会を結成しました。このアップデートは暫定的に ECMAScript 3.1 と名付けられました。このエディションは、セキュリティとライブラリの更新に焦点を当て、互換性に重点を置きます。前述の公開討論の後、ECMAScript 3.1 チームと ECMAScript 4 チームは妥協案に同意しました。つまり、2 つのエディションは並行して開発され、チーム間の調整により、ECMAScript 3.1 がセマンティクスと構文の両方で ECMAScript 4 の厳密なサブセットのままとなるようにするということです。
しかし、各チームの哲学の相違により、サブセット規則が繰り返し破られ、ECMAScript 4 反対派が将来的に ECMAScript 4 をサポートまたは実装するかどうかは疑問のままでした。ECMA 技術委員会 39 内で ECMAScript の将来に関する意見の相違が 1 年以上続いた後、2 つのチームは 2008 年 7 月に新たな妥協点に達しました。Brendan Eich は、Ecma TC39 がすべての関係者の完全な協力を得て ECMAScript 3.1 (後に ECMAScript, 5th Edition に改名) プロジェクトに注力し、ベンダーは 2009 年初頭までに少なくとも 2 つの相互運用可能な実装を目標とすると発表した。 [25] [26] 2009 年 4 月、Ecma TC39 は第 5 版の「最終」ドラフトを公開し、相互運用可能な実装のテストは 7 月中旬までに完了する予定であると発表した。[27] 2009年12月3日にECMA-262第5版が発行されました。[28]
追加された機能には、文字列の周囲の空白を簡単に削除するJSON (から)、文字列内の指定された位置から1文字を返す、などがあります。オブジェクト内の最後の値のペアの後のカンマ()も構文エラーを引き起こさなくなりました。[29]String.trim()" example ""example"String.charAt()Array.isArray()var example = { "property1":"value1", "property2":"value2", }
第 6 版 – ECMAScript 2015
第6版であるECMAScript 6(ES6)は、後にECMAScript 2015に改名され、2015年6月に完成しました。[4] [30]この更新では、クラス宣言()、などのES6モジュールなど、複雑なアプリケーションを書くための重要な新しい構文が追加されていますが、それらはECMAScript 5 strictモードと同じ用語で意味的に定義されています。その他の新しい機能には、イテレータとループ、Pythonスタイルのジェネレーター、矢印関数式()、ローカル宣言のキーワード、定数ローカル宣言のキーワード、バイナリデータ、型付き配列、新しいコレクション(マップ、セット、WeakMap)、プロミス、数値と数学の強化、リフレクション、プロキシ(仮想オブジェクトとラッパーのメタプログラミング)、エスケープ文字なしで複数行の文字列にバックティック()を使用するテンプレートリテラルなどがあります。[31] [32]完全なリストは膨大です。[33] [34]最初の「ECMAScript Harmony」仕様として、「ES6 Harmony」とも呼ばれています。
class Foo { ... }import * as moduleName from "..."; export const Foofor...of() => {...}letconst`
第 7 版 – ECMAScript 2016
第7版、つまりECMAScript 2016は、2016年6月に完成しました。[5]その機能には、**数値の指数演算子await、、async非同期プログラミング用のキーワード(ES2017の準備として)、Array.prototype.includes関数が含まれます。[5]指数演算子は と同等ですMath.powが、Python、F#、Perl、Rubyなどの言語に似た、より単純な構文を提供します。async/ はawait、Promiseを使用して非同期コードを開発するより簡単な方法として歓迎されました。
第 8 版 – ECMAScript 2017
第8版であるECMAScript 2017は、2017年6月に完成しました。[6]その機能にはObject.values、オブジェクトを簡単に操作するための、関数、ジェネレータとプロミスを使用する構造、Object.entriesおよび並行性とアトミック性のための追加機能が含まれています。また、も含まれています。[35] [6]Object.getOwnPropertyDescriptorsasyncawaitString.prototype.padStart()
第 9 版 – ECMAScript 2018
第9版、つまりECMAScript 2018は2018年6月に完成しました。[7]新機能には、オブジェクトリテラルのスプレッド演算子と残余パラメータ(...)、非同期反復、Promise.prototype.finallyRegExpへの追加などがあります。[7]
スプレッド演算子を使用すると、次に示すように、オブジェクトのプロパティを簡単にコピーできます。
オブジェクトを{ a : 1 , b : 2 }とします。
let objectClone = Object .assign ({ } , object ) // ES2018 以前let objectClone = {... object } // ES2018 構文
otherObject = { c : 3 , ... object }としますconsole.log ( otherObject ) //- > {c: 3, a: 1, b: 2}
第 10 版 – ECMAScript 2019
第10版であるECMAScript 2019は、2019年6月に公開されました。[8]Array.prototype.flat追加された機能には、、、のArray.prototype.flatMap変更Array.sort、などがありますObject.fromEntries。[8]
Array.sortは安定していることが保証されるようになりました。つまり、ソートキーが同じ要素はソート操作の前後で相対的な順序が変わりませんArray.prototype.flat(depth=1)。配列を指定された深さまで平坦化します。つまり、すべてのサブ配列要素 (指定された深さまで) が再帰的に連結されます。
もう一つの注目すべき変更点は、いわゆるキャッチバインディングがオプションになったことです。[36]
第 11 版 – ECMAScript 2020
第11版であるECMAScript 2020は、2020年6月に公開されました。[9]新しい関数に加えて、このバージョンでは、BigInt任意サイズの整数のプリミティブ型、null合体演算子、およびglobalThisオブジェクトが導入されています。[9]
BigIntBigInt は、コンストラクタまたは構文 (10n数値リテラルの後に「n」が配置されます)を使用して作成されます。BigInt を使用すると、 を超える整数の表現と操作が可能になりますNumber.MAX_SAFE_INTEGERが、Number は倍精度の 64 ビットIEEE 754値で表現されます。 の組み込み関数はMathBigInt と互換性がありません。たとえば、BigInt の累乗は、**ではなく 演算子を使用して実行する必要がありますMath.pow。
null 合体演算子 は??、左側がnullまたは の場合に右側のオペランドを返しますundefined。これは、以下に示すようなすべての「偽」値に対して を||返す 演算子とは対照的です。"string"
undefined ?? "文字列" // -> "文字列" null ?? "文字列" // -> "文字列" false ?? "文字列" // -> false NaN ?? "文字列" // -> NaN
オプション チェーンを使用すると、各レベルで AND チェックを行わずに、オブジェクトのネストされたプロパティにアクセスできます。 例: const zipcode = person?.address?.zipcode。いずれかのプロパティが存在しない場合は、zipcodeになりますundefined。
第 12 版 – ECMAScript 2021
第12版であるECMAScript 2021は、2021年6月に公開されました。[10]このバージョンではreplaceAll、文字列のメソッドPromise.any、入力値が満たされると短絡するPromiseコンビネータ、AggregateError一度に複数のエラーを表す新しいエラー型、論理代入演算子(??=、、)、ガベージコレクションから保持せずにターゲットオブジェクトを参照するための、およびターゲットオブジェクトがガベージコレクションされるときに実行さ&&=れるクリーンアップ操作の登録と登録解除を管理するための、数値リテラルの区切り文字()が導入されました。そしてがより正確になり、実装定義のソート順になるケースの数が削減されました。
||=WeakRefFinalizationRegistry1_000Array.prototype.sort
第 13 版 – ECMAScript 2022
第 13 版である ECMAScript 2022 は、2022 年 6 月に公開されました。[11]このバージョンでは、トップレベルの が導入されawait、キーワードをモジュールのトップレベルで使用できるようになりました。新しいクラス要素: パブリックおよびプライベートのインスタンス フィールド、パブリックおよびプライベートの静的フィールド、プライベートのインスタンス メソッドとアクセサー、プライベートの静的メソッドとアクセサー、クラスごとの評価初期化を実行するクラス内の静的ブロック、オブジェクトに#x in objプライベート フィールドが存在するかどうかをテストする 構文、一致した部分文字列の開始インデックスと終了インデックスを提供する フラグを介した正規表現一致インデックス、エラーの因果関係の連鎖を記録するために使用できるオブジェクトの プロパティ、相対インデックスを可能にする Strings、Arrays、および TypedArrays の メソッド、およびの便利な代替手段が導入されました。
/dcauseErroratObject.hasOwnObject.prototype.hasOwnProperty
第 14 版 – ECMAScript 2023
第14版であるECMAScript 2023は、2023年6月に発行されました。[ 37]このバージョンではtoSorted、およびのtoReversed、、、、およびメソッドと、のメソッドが導入され、実行可能なECMAScriptファイルをより使いやすくするためにファイルの先頭にシェバンコメントのサポートが追加され、ほとんどのシンボルを弱いコレクションのキーとして使用できるようになりました。
withfindLastfindLastIndexArray.prototypeTypedArray.prototypetoSplicedArray.prototype#!
第 15 版 – ECMAScript 2024
第15版であるECMAScript 2024は2024年6月に発行されました。[38]このバージョンでは、Object.groupByおよびMap.groupBy静的メソッド、、Promise.withResolversおよび/v正規表現用のUnicodeフラグが導入されています。
メソッドObject.groupByとMap.groupByメソッドは、指定されたコールバック関数の戻り値を使用して反復可能オブジェクトをグループ化します。
// サンプルデータ
const arr = [ { year : "2024" , id : 0 }, { year : "2023" , id : 1 }, { year : "2024" , id : 2 }, ];
const obj = Object.groupBy ( arr , ( el ) => el.year ) ; console.log ( obj ); // { "2024": [{ year: " 2024 ", id: 0 } , { year : "2024", id: 2 }], "2023": [{ year: "2023", id: 1 }] }
Promise.withResolversコンストラクタで割り当てることなく、プロミスのresolve関数とreject関数を直接取得する簡単な方法を提供します。[39]
// ES 2023
let resolve ; let reject ; let promise = new Promise (( res , rej ) => { resolver = res ; reject = rej ; });
// ES 2024 const { resolver , reject , promise } = Promise.withResolvers () ;
正規表現のフラグ/vは単にフラグの改良版である/uが、下位互換性のない変更を加えるため、新しいフラグとして導入する必要がありました。[40]
ES.次へ
ES.Next は、執筆時点での次のバージョンを指す動的な名前です。ES.Next の機能には、承認された仕様の一部ではない完成した提案 (別名「ステージ 4 提案」) が含まれます。言語委員会は「生きた仕様」モデルに従っているため、これらの変更は標準の一部であり、承認は形式的なものです。[41]
参考文献
- ^ 「DevEdge Online – オンライン JavaScript リファレンス マニュアル」。1997 年 6 月 14 日時点のオリジナルよりアーカイブ。2023年 10 月 13 日閲覧。
{{cite web}}: CS1 maint: bot: 元の URL ステータス不明 (リンク) - ^ 「JavaScript リファレンス」。1999 年 4 月 20 日時点のオリジナルよりアーカイブ。2023 年 10 月 13 日閲覧。
{{cite web}}: CS1 maint: bot: 元の URL ステータス不明 (リンク) - ^ Ghostarchive および Wayback Machine にアーカイブされています: 「JavaScript の変更点、パート 1: EcmaScript 5」。YouTube。2009 年 5 月 18 日。2013年 10 月 31 日閲覧。
- ^ ab "ECMAScript 2015 Language Specifications". Ecma International . 2015年6月. 2022年2月14日時点のオリジナルよりアーカイブ。2021年6月28日閲覧。
- ^ abc 「ECMAScript 2016 言語仕様」。Ecma International。2016年6月。2022年2月14日時点のオリジナルよりアーカイブ。2021年6月28日閲覧。
- ^ abc 「ECMAScript 2017 言語仕様」。Ecma International。2017年6月。2021年1月17日時点のオリジナルよりアーカイブ。2021年6月28日閲覧。
- ^ abc 「ECMAScript 2018 言語仕様」。Ecma International。2018年6月。2022年2月14日時点のオリジナルよりアーカイブ。2021年6月28日閲覧。
- ^ abc 「ECMAScript 2019 言語仕様」。Ecma International。2019年6月。2022年2月14日時点のオリジナルよりアーカイブ。2021年6月28日閲覧。
- ^ abc 「ECMAScript 2020 言語仕様」。Ecma International。2020年6月。2021年1月18日時点のオリジナルよりアーカイブ。2021年6月28日閲覧。
- ^ ab "ECMAScript 2021 Language Specifications". Ecma International . 2021年6月. 2021-06-24時点のオリジナルよりアーカイブ。 2021-06-26に閲覧。
- ^ ab "ECMAScript 2022 Language Specifications". Ecma International . 2022年6月. 2023年12月24日時点のオリジナルよりアーカイブ。 2024年7月22日閲覧。
- ^ 「ECMAScript 2023 言語仕様」。Ecma International。2023年6月。2023年12月20日時点のオリジナルよりアーカイブ。2024年7月22日閲覧。
- ^ 「ECMAScript 2024 言語仕様」。Ecma International。2024年6月。
- ^ 2015-03-24 会議メモ Archived 2017-06-23 at the Wayback Machine . ESDiscuss. また、Ecma 撤回標準も参照してください Archived 2015-08-13 at the Wayback Machine . ECMA.
- ^ Hansen, Lars T (2007-10-22). 「ES4 の概要ペーパーが公開されました」。mozilla.org。Mail.mozilla.org。2013-11-02時点のオリジナルよりアーカイブ。2013-10-31取得。
- ^ Peyrott, Sebastian (2021-03-04). 「ECMAScript 4 の裏にある本当の話」. auth0.com . 2020-05-12 時点のオリジナルよりアーカイブ。2020-03-05閲覧。
- ^ 「提案された ECMAScript 4th Edition – 言語の概要」(PDF)。ecmascript.org 。2007年 10 月 23 日。2010 年 12 月 23 日時点のオリジナル(PDF)からアーカイブ。
- ^ John Resig. 「John Resig – JavaScript 2 のバグ修正」。Ejohn.org。2013 年 11 月 2 日時点のオリジナルよりアーカイブ。2013 年 10 月 31 日閲覧。
- ^ 「ES3 と提案された ES4 の互換性」(PDF)。Ecmascript.org。2014年 7 月 24 日のオリジナル(PDF)からアーカイブ。2013 年 10 月 31 日閲覧。
- ^ 「ECMAScript 言語仕様」(PDF)。Ecma International。2009-04-19。2009-04-19のオリジナル(PDF)からアーカイブ。2018-03-19に取得。
- ^ 「ECMAScript 3 and Beyond – IEBlog – Site Home – MSDN Blogs」。Blogs.msdn.com。2007 年 10 月 30 日。2010 年 2 月 11 日時点のオリジナルよりアーカイブ。2013年 10 月 31 日閲覧。
- ^ 「ES4 についての私の考え – Albatross! – サイト ホーム – MSDN ブログ」。Blogs.msdn.com。2007 年 10 月 31 日。2010 年 1 月 27 日時点のオリジナルからアーカイブ。2013年 10 月 31 日取得。
- ^ 「クリス・ウィルソンへの公開書簡」ブレンダン・アイク、2007年10月31日。2011年9月16日時点のオリジナルよりアーカイブ。2013年10月31日閲覧。
- ^ 「JavaScript 2 とオープン Web」 2007 年 11 月 20 日。2014 年 2 月 10 日時点のオリジナルよりアーカイブ。2014年 1 月 20 日閲覧。
- ^ 「ECMAScript Harmony」。Mail.mozilla.org。2008年8月13日。2013年8月26日時点のオリジナルよりアーカイブ。2013年10月31日閲覧。
- ^ 「JavaScript 標準化における大きなマイルストーン – JScript ブログ – サイト ホーム – MSDN ブログ」。Blogs.msdn.com。2009 年 4 月 9 日。2010 年 3 月 23 日時点のオリジナルよりアーカイブ。2013年 10 月 31 日閲覧。
- ^ 「Ecma International が ECMAScript の大幅な改訂を最終決定」 Ecma International 2009-04-09。2011-09-04 時点のオリジナルよりアーカイブ。2009-05-22閲覧。
- ^ “Ecma previous news”. Ecma-international.org. 2020年4月16日時点のオリジナルよりアーカイブ。2020年3月29日閲覧。
- ^ W3schools の JavaScript バージョン
- ^ Krill, Paul. 「正式にECMAScript 6が承認されました」。InfoWorld。2018年3月23日時点のオリジナルよりアーカイブ。 2018年3月19日閲覧。
- ^ 「5 Great Features in EcmaScript 6 (ES6 Harmony) – Wintellect」。Wintellect。2014年3月24日。2017年7月22日時点のオリジナルよりアーカイブ。 2018年3月19日閲覧。
- ^ 「ECMAScript 6 (ES6): JavaScript の次期バージョンの新機能」Smashing Magazine 2015-10-28。2017-11-24 時点のオリジナルよりアーカイブ。2018-03-19に閲覧。
- ^ 「ECMAScript 6: 新機能: 概要と比較」。es6-features.org。2018年3月18日時点のオリジナルよりアーカイブ。2018年3月19日閲覧。
{{cite web}}: CS1 メンテナンス: 不適切 URL (リンク) - ^ 「Standard ECMA-262 6th Edition / June 2015 ECMAScript 2015 Language Specifications 14.2 Arrow Function Definitions」。www.ecma-international.org . 2015年。2022年2月14日時点のオリジナルよりアーカイブ。2021年6月28日閲覧。
- ^ 「ECMAScript 2017 (ES8): 最終機能セット」。2ality。2018年4月23日時点のオリジナルよりアーカイブ。2018年4月23日閲覧。
- ^ 「ES2019: オプションの catch バインディング」. 2ality.com . 2017-08-13 . 2022年4月26日閲覧。
- ^ 「ECMAScript 2023 言語仕様」。Ecma International。2023年6月。 2023年6月30日閲覧。
- ^ 「ECMAScript 2024 言語仕様」。Ecma International。2024年6月。
- ^ 「Promise.withResolvers() - JavaScript | MDN」。developer.mozilla.org . 2023-11-23 . 2024-08-18閲覧。
- ^ 「RegExp v フラグと文字列の表記法とプロパティの設定 · V8」。v8.dev。2024年 8 月 18 日閲覧。
- ^ 「ES.Next は ECMAScript 言語仕様の次期版です — Tuto Javascript」。gdevops.gitlab.io 。2023年 7 月 5 日閲覧。
外部リンク
JavaScript 1.0
- Ecmascript として標準化のために最初のバージョンを提出する前に、Netscape Navigator 2.0 で実装されたもの:「JavaScript Authoring Guide」。1997 年 6 月 13 日にオリジナルからアーカイブされました。2023年 10 月 13 日に取得。
{{cite web}}: CS1 maint: bot: 元の URL ステータス不明 (リンク)
ISO規格
- ISO/IEC 22275:2018
ECMA規格
- ECMA-262 ECMAScript 言語仕様
- 第 1 版、1997 年 6 月: PDF
- 第 2 版、1998 年 8 月: PDF
- 第 3 版、1999 年 12 月: PDF
- 第 3 版最終版、2000 年 3 月: PDF
- 第4版(概要): PDF
- 第 4 版 (最終ドラフト): HTML、PDF
- 第 5 版、2009 年 12 月: PDF
- 5.1 版、2011 年 6 月: HTML、PDF
- 第 6 版、2015 年 6 月 (ECMAScript 2015 言語仕様): HTML、PDF
- 第 7 版、2016 年 6 月 (ECMAScript 2016 言語仕様): HTML、PDF
- 第 8 版、2017 年 6 月 (ECMAScript 2017 言語仕様): HTML、PDF
- 第 9 版、2018 年 6 月 (ECMAScript 2018 言語仕様): HTML、PDF
- 第 10 版、2019 年 6 月 (ECMAScript 2019 言語仕様): HTML、PDF
- 第 11 版、2020 年 6 月 (ECMAScript 2020 言語仕様): HTML、PDF
- 第 12 版、2021 年 6 月 (ECMAScript 2021 言語仕様): HTML、PDF
- 第 13 版、2022 年 6 月 (ECMAScript 2022 言語仕様):HTML、PDF
- 第 14 版、2023 年 6 月 (ECMAScript 2023 言語仕様):HTML、PDF
- 第 15 版、2024 年 6 月 (ECMAScript 2024 言語仕様):HTML、PDF
- ECMA-290 ECMAScript コンポーネント仕様 (1999 年 6 月)
- ECMA-327 ECMAScript 第 3 版コンパクト プロファイル (2001 年 6 月)
- ECMA-357 ECMAScript for XML (E4X) 仕様 (2004 年 6 月)
