JavaScriptとECMAScriptの違いは何ですか?

「JavaScriptとECMAScriptの違い」をグーグルで調べてみました。

私は結局、あいまいで一見矛盾する結果の海を歩き回らなければなりませんでした:

「ECMAScriptは標準です。」

「JavaScriptは標準です。」

「ECMAScriptは仕様です。」

「JavaScriptはECMAScript標準の実装です。」

「ECMAScriptは標準化されたJavaScriptです。」

「ECMAScriptは言語です。」

「JavaScriptはECMAScriptの方言です。」

「ECMAScriptJavaScriptです。」

泣きたいという衝動を抑えて、私は身をかがめて、痛みを伴うが生産的な研究に取り組むことにしました。

この記事は、JavaScriptとECMAScriptの違いについての私の現在の理解を表しています。JavaScriptに精通しているが、ECMAScript、Webブラウザー、Babelなどとの関係をより明確に理解したい人を対象としています。また、スクリプト言語、JavaScriptエンジン、JavaScriptランタイムについても学びます。

だから、ポンプでくみます。

JavaScript / ECMAScript用語集

以下は、一貫性と明快さに焦点を当てて設計された定義のリストです。定義は100%完全ではありません。これらは、JavaScriptとECMAScriptの間の接続と関係を高レベルで理解できるように構築されています。

それ以上の苦労なしに、始めましょう。

Ecma International

テクノロジーの標準を作成する組織。

「標準」の例を説明するために(Ecmaによって作成されたものではありませんが)、これまでに使用したすべてのキーボードについて考えてみてください。大多数の文字は同じ順序で、スペースバー、Enterキー、矢印キーがあり、上部に数字が一列に表示されていましたか?これは、ほとんどのキーボードメーカーが、QWERTYレイアウト標準に基づいてキーボードの設計を行っているためです。

ECMA-262

これは、EcmaInternationalによって発行された標準です。汎用スクリプト言語の仕様が含まれています。

ECMA-262はQWERTYのような標準ですが、キーボードレイアウト仕様を表す代わりに、ECMAScriptと呼ばれるスクリプト言語仕様を表します。

ECMA-262をECMAScriptの参照番号と考えてください。

スクリプト言語

既存のエンティティまたはシステムに作用するために特別に設計されたプログラミング言語

プログラミング言語をスクリプト言語にする一般的な考え方については、コマンド「walk」、「run」、および「jump」を検討してください。これらのアクションには、実行するための何か、おそらく人、犬、またはビデオゲームのキャラクターが必要です。これらのコマンドを実行するアクターがなければ、「歩く」、「走る」、「ジャンプする」は意味がありません。この一連のアクションは、外部エンティティの操作に焦点を当てたスクリプト言語に類似しています。

ECMAScript

汎用スクリプト言語を作成するためにECMA-262で定義された仕様。

同義語: ECMAScript仕様

ECMA-262は標準の名前ですが、スクリプト言語仕様ECMAScriptを表しています。

ECMAScriptは、スクリプト言語がECMAScriptに準拠していると見なされるために遵守しなければならない規則、詳細、およびガイドラインを提供します。

JavaScript

ECMAScript仕様に準拠する汎用スクリプト言語。

JavaScriptは、私がプログラミングするのが大好きなコーヒー風味の言語です。ECMAScriptは、それが基づいている仕様です。ECMAScript仕様を読むことにより、作成方法を学びますスクリプト言語。JavaScriptのドキュメントを読むことで、スクリプト言語の使用方法を学びます。

JavaScriptを「ECMAScript言語の方言」と呼ぶときは、英語、フランス語、または中国語の方言について話すときと同じ意味です。方言は、その語彙と構文のほとんどを親言語から派生させますが、区別に値するほど十分に逸脱しています。

JavaScriptは、ECMA-262で説明されているようにほとんどECMAScript仕様を実装していますが、いくつかの違いがあります。Mozillaは、JavaScriptの非ECMAScript言語機能の概要をここに示します。

JavaScriptエンジン

JavaScriptコードを理解して実行するプログラムまたはインタープリター。

同義語:JavaScriptインタープリター、JavaScript実装

JavaScriptエンジンは、ChromeのV8、FirefoxのSpiderMonkey、EdgeのChakraなどのWebブラウザーで一般的に見られます。各エンジンは、そのアプリケーションの言語モジュールのようなものであり、JavaScript言語の特定のサブセットをサポートできます。

ブラウザに対するJavaScriptエンジンは、人にとっての言語理解のようなものです。「歩く」、「走る」、「ジャンプする」というアクションの例をもう一度見てみると、JavaScriptエンジンは、これらのアクションの意味を実際に理解している「エンティティ」の一部です。

この例えは、ブラウザに関するいくつかのことを説明するのに役立ちます。

ブラウザのパフォーマンスの違い

2人はコマンドの「ジャンプ」を認識しますが、1人は他の人よりも速くコマンドを理解して処理できるため、1人はコマンドにすばやく反応する可能性があります。同様に、2つのブラウザはJavaScriptコードを理解できますが、JavaScriptエンジンがより効率的に実装されているため、1つはより高速に実行されます。

ブラウザサポートの違い

同じ言語を話す人々の間に存在する違いを考慮してください。多くの人が英語を話すとしても、他の人が知らない単語、表現、構文規則を知っている人もいれば、その逆もあります。ブラウザも同じです。ブラウザのJavaScriptエンジンはすべてJavaScriptを理解していますが、一部のブラウザは他のブラウザよりも言語をよく理解しています。ブラウザが言語をサポートする方法には違いがあります。

ブラウザのサポートに関しては、JavaScriptエンジンが解析して実行する場合でも、通常、「JavaScriptの互換性」ではなく「ECMAScriptの互換性」について話します。これは少し混乱するかもしれませんが、説明があります。

思い出してください。ECMAScriptは、スクリプト言語どのように見えるかについての仕様です。ECMAScriptの新版をリリースしても、存在するすべてのJavaScriptエンジンに突然これらの新機能が追加されたわけではありません。JavaScriptエンジンを担当するグループまたは組織が、最新のECMAScript仕様について最新の情報を入手し、その変更を採用する必要があります。

したがって、開発者は「このブラウザはどのバージョンのECMAScriptをサポートしていますか?」などの質問をする傾向があります。または「このブラウザはどのECMAScript機能をサポートしていますか?」彼らは、Google、Mozilla、MicrosoftがブラウザのJavaScriptエンジン(それぞれV8、SpiderMonkey、Chakraなど)を最新のECMAScriptで説明されている機能で更新できるかどうかを知りたがっています。

ECMAScript互換性テーブルは、これらの質問に答えるための優れたリソースです。

ECMAScriptの新しいエディションがリリースされた場合、JavaScriptエンジンは更新全体を一度に統合しません。FirefoxのJavaScript変更ログからのこの抜粋に見られるように、これらは新しいECMAScript機能を段階的に組み込んでいます。

JavaScriptランタイム

JavaScriptコードが実行され、JavaScriptエンジンによって解釈される環境。ランタイムは、JavaScriptが操作および操作できるホストオブジェクトを提供します。

同義語ホスト環境

JavaScriptランタイムは、スクリプト言語の定義で言及されている「既存のエンティティまたはシステム」です。コードはJavaScriptエンジンを通過し、解析および理解されると、エンティティまたはシステムが解釈されたアクションを実行します。犬歩く、人実行すると、ビデオゲームのキャラクターがジャンプします(または上の画像の場合は難破します)。

アプリケーションは、実行時に「ホストオブジェクト」を提供することにより、JavaScriptスクリプトで利用できるようにします。クライアント側の場合、JavaScriptランタイムはWebブラウザーであり、ウィンドウやHTMLドキュメントなどのホストオブジェクトを操作できるようにします。

ウィンドウまたはドキュメントのホストオブジェクトを操作したことがありますか?ウィンドウオブジェクトとドキュメントオブジェクトは、実際にはコアJavaScript言語の一部ではありません。これらはWebAPIであり、JavaScriptのホスト環境として機能するブラウザーによって提供されるオブジェクトです。サーバー側の場合、JavaScriptランタイムはNode.jsです。ファイルシステム、プロセス、リクエストなどのサーバー関連のホストオブジェクトはNode.jsで提供されます。

興味深い点:異なるJavaScriptランタイムが同じJavaScriptエンジンを共有できること。たとえば、V8は、GoogleChromeとNode.jsの両方で使用されるJavaScriptエンジンです。2つのまったく異なる環境です。

ECMAScript 6

これはECMA-262標準の第6版であり、ECMAScript仕様に大きな変更と改善が加えられています。

同義語:ES6、ES2015、およびECMAScript 2015

このエディションのECMAScriptは、2015年にEcma InternationalがECMAScriptの年次リリースに切り替えることを決定したため、名前がES6からES2015に変更されました。したがって、Ecma Internationalは、リリースされた年に基づいてECMAScript仕様の新しいエディションの名前も付け始めました。要するに、ES6とES2015は同じものの2つの異なる名前です。

バベル

ES6コードをES5コードに変換できるトランスパイラー。

開発者はES6に付属する光沢のある新機能を使用できますが、Webアプリのブラウザー間の互換性に懸念がある場合があります。この記事の執筆時点では、EdgeとInternetExplorerはES6仕様の機能を完全にはサポートしていません。

懸念のある開発者は、Babelを使用して、ES6コードをES5機能のみを使用する機能的に同等のバージョンに変換できます。主要なブラウザはすべてES5を完全にサポートしているため、問題なくコードを実行できます。

もう1つの興味深い一口

JavaScriptとECMAScriptに関するこの情報がお役に立てば幸いです。ここでまとめる前に、私のような駆け出しのWeb開発者のために明確にする必要のあるもう1つの情報を共有したいと思います。

鶏肉または卵

紛らわしい歴史は、JavaScriptが1996年に作成されたことです。その後、標準化のために1997年にEcma Internationalに提出され、ECMAScriptが作成されました。同時に、JavaScriptはECMAScript仕様に準拠しているため、JavaScriptはECMAScript実装の例です。

それは私たちにこの面白い事実を残します:ECMAScriptはJavaScriptに基づいており、JavaScriptはECMAScriptに基づいています。

知っている。

それは、人々が自分の親であるというタイムトラベルの比喩とまったく同じように聞こえます—少し不安定ですが、考えるのはちょっと楽しいです。

いいこと

私たちは皆ここで楽しんだことを知っていますが、それは消化するための多くの情報でした。この機会に別れを告げます。

以下に質問、コメント、提案、懸念事項を残してください。

読んでいただきありがとうございます!