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

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



どういうわけかGoogleで「JavaScriptとECMAScriptの違い」を試しました。



その結果、あいまいで一見矛盾した結果の海を歩き回らなければなりませんでした。



「ECMAScriptが標準です。」

「JavaScriptが標準です。」

「ECMAScriptは仕様です。」

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

「ECMAScript-標準化されたJavaScript。」

「ECMAScriptは言語です。」

「JavaScriptはECMAScriptの方言です。」

「ECMAScriptはJavaScriptです。」









泣きたいという欲求を抑えて、私たちは自分自身をコントロールしようとし、面倒ではあるが生産的な研究を行いました。



この記事では、JavaScriptとECMAScriptの違いについての理解を示します。 この記事は、JavaScriptに精通しているが、ECMAScript、Webブラウザー、Babelなどとの関係をより明確に把握したい人向けに書かれています。 また、スクリプト言語、JavaScriptエンジン、およびJavaScriptランタイムについても学習します。



さあ、行きましょう。



JavaScript / ECMAScript辞書



以下は、一貫性と明確性に重点を置いた定義のリストです。 定義は完全ではありません。 これらは、JavaScriptとECMAScriptの接続と親族関係に精通しているように構築されています。



エクマインターナショナル



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









「標準」の例を説明するために(Ecmaでは作成されていませんが)、これまでに使用したすべてのキーボードを考えてください。 ほとんどの場合、レイアウトは同じでしたか? スペース、Enterキー、カーソルキー? 番号は一番上の行にありましたか? これは、ほとんどの開発者がキーボードデザインの作成時にQWERTYレイアウト標準を使用しているためです。



ECMA-262



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









ECMA-262はQWERTYに似た標準で、ECMAScriptと呼ばれるスクリプト言語の仕様のみを表します。



ECMA-262はECMAScriptアカウント番号と見なすことができます。





ECMA-260、ECMA-261、ECMA-262。 そして、これがECMAScriptです。



スクリプト言語



既存のオブジェクトまたはシステムで動作するように作成されたプログラミング言語。



プログラミング言語がスクリプト言語になる方法を理解するには、コマンド「walk」、「run」、「jump」を検討してください。 誰かがそれらを実行する必要があります。たとえば、人、犬、またはビデオゲームのキャラクターです。 俳優がコマンドを実行しないと、これらの「歩く」、「走る」、「ジャンプ」はすべて意味をなさない。 この一連のアクションは、外部オブジェクトを制御するように設計されたスクリプト言語に似ています。



ECMAScript



ECMA-262で説明されている汎用スクリプト言語を作成するための仕様。



同義語 :ECMAScript仕様。









「ECMA-262」は、ECMAScriptスクリプト言語の標準と仕様の両方の名前です。



ECMAScriptには、ECMAScriptと互換性があると見なされるためにスクリプト言語が従わなければならない規則、情報、および推奨事項が含まれています。





ECMAScript 2017言語仕様から抜粋。 暇なときに読みたいものを探している場合、ドキュメントの長さは約900ページです。



Javascript



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



これはECMAScriptの方言です。







JavaScriptは、コーヒーの香りに浸した私のお気に入りのプログラミング言語です。 ECMAScriptは、ベースとなる仕様です。 ECMAScript仕様からスクリプト言語を作成する方法、およびJavaScriptドキュメントからスクリプト言語を使用する方法を学習します



JavaScriptを「ECMAScriptの方言」と呼ぶ場合、英語、フランス語、または中国語の方言に言及するのと同じ意味です。 方言は、その語彙と構文のほとんどを親言語から継承しますが、親言語とは著しく異なります。



ECMA-262で述べたように、JavaScriptは基本的にECMAScript仕様を実装していますが、いくつかの違いがあります。 Mozilla 、ECMAScriptに固有ではないJavaScript機能の概要を説明しました





2017年9月3日のスクリーンショット。 これは、(少なくとも今のところ)ECMAScriptの一部ではない実験的にテストされたJavaScript機能のリストです。



Javascriptエンジン



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



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









JavaScriptエンジンは、ChromeのV8、FirefoxのSpiderMonkey、EdgeのChakraなど、Webブラウザーで一般的に使用されています。 各エンジンは言語モジュールに似ており、アプリケーションはJavaScript言語の特定のサブセットをサポートできます。



ブラウザにとって、JavaScriptエンジンは、人が音声を理解する能力のようなものです。 再び「walk」、「run」、「jump」の例に戻ると、JavaScriptエンジンは「オブジェクト」の一部であり、実際にこれらのアクションの意味を理解しています。



この類推は、ブラウザの機能の一部を説明するのに役立ちます。







異なるブラウザーのパフォーマンス



2人の人が「ジャンプ」コマンドを理解しますが、そのうちの1人はコマンドをすばやく理解して処理することができたため、より早く反応します。 同様に、2つのブラウザーはJavaScriptコードを理解できますが、一方のブラウザーはJavaScriptエンジンがより効率的に機能するため、より速く動作します。







さまざまなブラウザのサポート



英語話者の大規模なグループを考えてみましょう。 その中の誰かは、他の人には知られていない特定の単語、式、および構文規則を知っている可能性があります。 ブラウザでも同じです。 ブラウザベースのJavaScriptエンジンはすべてJavaScriptを理解しますが、一部のJavaScriptエンジンは他のJavaScriptエンジンよりもJavaScriptをよく理解しています。 ブラウザの言語をサポートするには、さまざまな方法があります。



ブラウザのサポートについて言えば、彼らは通常「JavaScript互換性」ではなく「ECMAScript互換性」に言及していますが、JavaScriptエンジンはそれらを詳細に分析して実行します... 紛らわしいですね、説明させてください。





これはECMAScriptブラウザサポートテーブルの一部です。 JavaScriptバージョンは記載されていません。



覚えているかもしれませんが 、ECMAScriptはスクリプト言語どのように見えるかの仕様です。 ECMAScriptの新しいバージョンが登場しても、すべてのJavaScriptエンジンに新しい機能が追加されるわけではありません。 それはすべて、最新のECMAScript仕様に基づいてJavaScriptエンジンを更新するグループまたは組織に依存しています。



したがって、開発者は通常、「 このブラウザーはどのバージョンのECMAScriptをサポートしていますか?」 「または」 このブラウザはECMAScriptのどの機能をサポートしていますか? »Google、Mozilla、MicrosoftがJavaScriptエンジン(それぞれV8SpiderMonkeyChakra )にECMAScriptの最新バージョンで説明されている機能を提供することに成功したかどうかを知りたい。



ECMAScript互換性チャートに多くの質問に対する答えがあります。



ECMAScriptの新しいバージョンがリリースされた場合、すべての革新がJavaScriptエンジンに一度に表示されることはありません。 FirefoxのJavaScript変更ログの例に見られるように、リリースごとに徐々に実装されます。





ES2015およびES2017標準の一部はFirefox 50ブラウザーのSpiderMonkey JavaScriptエンジンに実装されていましたが、ES2015およびES2017のその他の部分は以前に実装されており、今後のバージョンでも継続されました。



JavaScriptランタイム



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



同義語 :ホスト環境。









JavaScriptランタイムは、スクリプト言語の定義で言及されている「既存のオブジェクトまたはシステム」です。 コードは、オブジェクトまたはシステムがコードを分析し、その作業を解析するJavaScriptエンジンを通過し、解釈されたアクションを実行します。 犬が歩いている、人が走っている、ビデオゲームのキャラクターがジャンプしている(または写真のように破壊している)。



JavaScriptスクリプトは、ランタイムでホストオブジェクトを提供するため、アプリケーションにアクセスできます。 クライアント側では、JavaScriptランタイムはWebブラウザーになり、ウィンドウやHTMLドキュメントなどのホストオブジェクトを操作できるようになります。 ホストオブジェクトをウィンドウまたはドキュメントとして使用したことがありますか? このようなオブジェクトは、基本的なJavaScriptの一部ではありません。 これらはWeb APIであり、JavaScriptホスト環境として動作するブラウザーによって提供されるオブジェクトです。



サーバー側では、JavaScriptランタイムはNode.jsです。 Node.jsは、ファイルシステム、プロセス、リクエストなどのサーバー関連のホストオブジェクトを提供します。



興味深いことに、異なるJavaScriptランタイムは同じJavaScriptエンジンを使用できます。 たとえば、V8は、Google ChromeとNode.jsという2つのまったく異なる環境で使用されるエンジンです。



ECMAScript 6



これはECMA-262標準の第6版で、ECMAScript仕様に大きな変更と改善を加えました。



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









2015年以降、Ecma InternationalはECMAScriptの年次リリースに切り替えており、ECMAScriptのこのバージョンはES6からES2015に名前が変更されています。 Ecma Internationalは、リリース年に合わせてECMAScript仕様の新しいバージョンに名前を付け始めました。 つまり、ES6とES2015は同じものです。



バベル



ES6コードをES5コードに変換するトランスポーター。









ES6では、開発者が優れた新機能を利用できますが、ブラウザー間の互換性を忘れてはなりません。 この記事の執筆時点では、EdgeとInternet ExplorerはES6仕様のすべての機能をサポートしていません。



必要に応じて、開発者はBabelを使用してES6コードをES5機能のみを使用する機能的に同等のバージョンに変換(変換)できます。 すべての主要なブラウザはES5を完全にサポートしているため、トランスコードされたコードは問題なく動作します。



もう一つ



JavaScriptとECMAScriptについて新しいことを学んだことを願っています。 終了する前に、初心者のWeb開発者向けに何かを明確にしたいと思います。



鶏肉または卵



JavaScriptは1996年に作成されました。 1997年、Ecma InternationalはJavaScriptの標準化を提案し、その結果、ECMAScriptが登場しました。 ただし、JavaScriptはECMAScript仕様に準拠しているため、JavaScriptはECMAScriptの実装例です。



ECMAScriptはJavaScriptに基づいており、JavaScriptはECMAScriptに基づいていることがわかります。



はい、タイムトラベラーが自分の両親になると、映画のようなスタンプのように見えます。 ちょっと変だが面白い。



ここで述べたすべてが少しあなたを楽しませたことを理解していますが、あなたが思考のための食物を受け取ったことを願っています。 休暇を取らせてください。



All Articles