Was ist der Unterschied zwischen JavaScript und ECMAScript?

Ich habe versucht, "den Unterschied zwischen JavaScript und ECMAScript" zu googeln.

Am Ende musste ich mich durch ein Meer zweideutiger und scheinbar widersprüchlicher Ergebnisse waten:

"ECMAScript ist ein Standard."

"JavaScript ist ein Standard."

"ECMAScript ist eine Spezifikation."

"JavaScript ist eine Implementierung des ECMAScript-Standards."

"ECMAScript ist standardisiertes JavaScript."

"ECMAScript ist eine Sprache."

"JavaScript ist ein Dialekt von ECMAScript."

"ECMAScript ist JavaScript."

Ich hielt den Drang zum Weinen zurück, bückte mich und beschloss, mich auf schmerzhafte, aber produktive Forschung einzulassen.

Dieser Artikel repräsentiert mein aktuelles Verständnis der Unterschiede zwischen JavaScript und ECMAScript. Es richtet sich an Personen, die mit JavaScript vertraut sind, aber ein klareres Verständnis der Beziehung zu ECMAScript, Webbrowsern, Babel und mehr wünschen. Außerdem erfahren Sie mehr über Skriptsprachen, JavaScript-Engines und JavaScript-Laufzeiten.

Also lass dich pumpen.

Ein JavaScript / ECMAScript-Glossar

Nachfolgend finden Sie eine Liste von Definitionen, die auf Konsistenz und Klarheit ausgerichtet sind. Die Definitionen sind nicht 100% vollständig. Sie sind so aufgebaut, dass ein umfassendes Verständnis der Verbindung und Beziehung zwischen JavaScript und ECMAScript vermittelt wird.

Lassen Sie uns ohne weiteres loslegen.

Ecma International

Eine Organisation, die Standards für Technologien schafft.

Um ein Beispiel für „Standard“ (obwohl nicht von Ecma erstellt) zu veranschaulichen, denken Sie an alle Tastaturen, die Sie jemals verwendet haben. Hatte die überwiegende Mehrheit Buchstaben in derselben Reihenfolge und eine Leertaste, eine Eingabetaste und Pfeiltasten, wobei die Zahlen oben in einer Reihe angezeigt wurden? Dies liegt daran, dass die meisten Tastaturhersteller ihr Tastaturdesign auf dem QWERTZ-Layoutstandard basieren.

ECMA-262

Dies ist ein von Ecma International veröffentlichter Standard. Es enthält die Spezifikation für eine allgemeine Skriptsprache.

ECMA-262 ist ein Standard wie QWERTY, aber anstatt eine Tastaturlayoutspezifikation darzustellen, repräsentiert es eine Skriptsprachenspezifikation namens ECMAScript.

Stellen Sie sich ECMA-262 als ECMAScript-Referenznummer vor.

Eine Skriptsprache

Eine Programmiersprache, die speziell für die Bearbeitung einer vorhandenen Entität oder eines vorhandenen Systems entwickelt wurde

Betrachten Sie die Befehle "walk", "run" und "jump", um eine allgemeine Vorstellung davon zu erhalten, was eine Programmiersprache zu einer Skriptsprache macht. Diese Aktionen erfordern etwas, um sie auszuführen, vielleicht eine Person, einen Hund oder eine Videospielfigur. Ohne einen Schauspieler, der diese Befehle ausführt, wäre „Gehen“, „Laufen“ und „Springen“ nicht sinnvoll. Diese Reihe von Aktionen entspricht einer Skriptsprache, die sich auf die Manipulation einer externen Entität konzentriert.

ECMAScript

Die in ECMA-262 definierte Spezifikation zum Erstellen einer allgemeinen Skriptsprache.

Synonym: ECMAScript-Spezifikation

Während ECMA-262 der Name des Standards ist, repräsentiert er die Skriptsprachenspezifikation ECMAScript.

ECMAScript enthält die Regeln, Details und Richtlinien, die eine Skriptsprache beachten muss, um als ECMAScript-konform zu gelten.

JavaScript

Eine allgemeine Skriptsprache, die der ECMAScript-Spezifikation entspricht.

JavaScript ist die Sprache mit Kaffeegeschmack, mit der ich gerne programmiere. ECMAScript ist die Spezifikation, auf der es basiert. Durch Lesen der ECMAScript-Spezifikation lernen Sie, wie Sie erstelleneine Skriptsprache. Durch das Lesen der JavaScript - Dokumentation erfahren Sie , wie Sie verwenden eine Skriptsprache.

Wenn Leute JavaScript als "Dialekt der ECMAScript-Sprache" bezeichnen, meinen sie dies im gleichen Sinne wie wenn sie über englische, französische oder chinesische Dialekte sprechen. Ein Dialekt leitet den größten Teil seines Lexikons und seiner Syntax von seiner Muttersprache ab, weicht jedoch genug ab, um eine Unterscheidung zu verdienen.

JavaScript implementiert meistens die in ECMA-262 beschriebene ECMAScript-Spezifikation, es gibt jedoch eine Handvoll Unterschiede. Mozilla beschreibt hier die Nicht-ECMAScript-Sprachfunktionen von JavaScript:

Eine JavaScript-Engine

Ein Programm oder Interpreter, der JavaScript-Code versteht und ausführt.

Synonyme : JavaScript-Interpreter, JavaScript-Implementierung

JavaScript-Engines sind häufig in Webbrowsern zu finden, darunter V8 in Chrome, SpiderMonkey in Firefox und Chakra in Edge. Jede Engine ist wie ein Sprachmodul für ihre Anwendung, sodass eine bestimmte Teilmenge der JavaScript-Sprache unterstützt wird.

Eine JavaScript-Engine für einen Browser ist für eine Person wie ein Sprachverständnis.Wenn wir unser Beispiel für die Aktionen "Gehen", "Laufen", "Springen" erneut besuchen, ist eine JavaScript-Engine der Teil einer "Entität", die tatsächlich versteht, was diese Aktionen bedeuten.

Diese Analogie hilft, einige Dinge über Browser zu erklären:

Unterschiede in der Browserleistung

Zwei Personen können den Befehl „springen“ erkennen, aber eine kann schneller auf den Befehl reagieren, da die Person den Befehl schneller verstehen und verarbeiten kann als die andere Person. In ähnlicher Weise können zwei Browser JavaScript-Code verstehen, aber einer führt ihn schneller aus, da die JavaScript-Engine effizienter implementiert ist.

Unterschiede in der Browserunterstützung

Berücksichtigen Sie die Unterschiede zwischen Personen, die dieselbe Sprache sprechen. Selbst wenn viele Leute Englisch sprechen, kennen einige möglicherweise einige Wörter, Ausdrücke und Syntaxregeln, die andere nicht kennen, und umgekehrt. Browser sind genauso. Obwohl die JavaScript-Engines von Browsern alle JavaScript verstehen, haben einige Browser ein besseres Verständnis der Sprache als andere. Es gibt Unterschiede in der Art und Weise, wie Browser die Sprache unterstützen.

In Bezug auf die Browserunterstützung wird normalerweise eher von „ECMAScript-Kompatibilität“ als von „JavaScript-Kompatibilität“ gesprochen, obwohl JavaScript-Engines JavaScript analysieren und ausführen. Dies kann etwas verwirrend sein, aber es gibt eine Erklärung.

Wenn Sie sich erinnern, ist ECMAScript eine Spezifikation dafür, wie eine Skriptsprache aussehen könnte . Die Veröffentlichung einer neuen Ausgabe von ECMAScript bedeutet nicht, dass alle vorhandenen JavaScript-Engines plötzlich über diese neuen Funktionen verfügen. Es liegt an den Gruppen oder Organisationen, die für JavaScript-Engines verantwortlich sind, über die neuesten ECMAScript-Spezifikationen auf dem Laufenden zu sein und deren Änderungen zu übernehmen.

Daher neigen Entwickler dazu, Fragen zu stellen wie: "Welche Version von ECMAScript unterstützt dieser Browser?" oder "Welche ECMAScript-Funktionen unterstützt dieser Browser?" Sie möchten wissen, ob Google, Mozilla und Microsoft die JavaScript-Engines ihrer Browser - zum Beispiel V8, SpiderMonkey und Chakra - mit den im neuesten ECMAScript beschriebenen Funktionen aktualisiert haben.

Die ECMAScript-Kompatibilitätstabelle ist eine gute Quelle für die Beantwortung dieser Fragen.

Wenn eine neue Ausgabe von ECMAScript herauskommt, integrieren JavaScript-Engines nicht das gesamte Update auf einmal. Sie integrieren die neuen ECMAScript-Funktionen schrittweise, wie in diesem Auszug aus dem JavaScript-Änderungsprotokoll von Firefox zu sehen ist:

Eine JavaScript-Laufzeit

Die Umgebung, in der der JavaScript-Code ausgeführt wird und von einer JavaScript-Engine interpretiert wird. Die Laufzeit stellt die Hostobjekte bereit, mit denen JavaScript arbeiten kann.

Synonyme : Host-Umgebung

Die JavaScript-Laufzeit ist die in der Definition der Skriptsprache erwähnte „vorhandene Entität oder das vorhandene System“. Code durchläuft die JavaScript-Engine, und sobald eine Entität oder ein System analysiert und verstanden wurde, führt sie die interpretierten Aktionen aus. Ein Hundgeht, eine Personläuft, springt ein Videospielcharakter (oder im obigen Bild Wracks).

Anwendungen stellen sich JavaScript-Skripten zur Verfügung, indem sie zur Laufzeit „Host-Objekte“ bereitstellen. Für die Clientseite wäre die JavaScript-Laufzeit der Webbrowser, in dem Hostobjekte wie Fenster und HTML-Dokumente zur Bearbeitung zur Verfügung gestellt werden.

Haben Sie jemals mit den Fenster- oder Dokumenthostobjekten gearbeitet? Die Fenster- und Dokumentobjekte sind nicht Teil der JavaScript-Kernsprache. Dies sind Web-APIs, Objekte, die von einem Browser bereitgestellt werden, der als JavaScript-Hostumgebung fungiert. Für die Serverseite lautet die JavaScript-Laufzeit Node.js. Serverbezogene Hostobjekte wie das Dateisystem, Prozesse und Anforderungen werden in Node.js bereitgestellt.

Ein interessanter Punkt: Verschiedene JavaScript-Laufzeiten können dieselbe JavaScript-Engine verwenden. V8 ist beispielsweise die JavaScript-Engine, die sowohl in Google Chrome als auch in Node.js verwendet wird - zwei sehr unterschiedliche Umgebungen.

ECMAScript 6

Es ist die sechste Ausgabe des ECMA-262-Standards und enthält wesentliche Änderungen und Verbesserungen der ECMAScript-Spezifikation.

Synonyme : ES6, ES2015 und ECMAScript 2015

Diese Ausgabe von ECMAScript wurde in ES6 in ES2015 umbenannt, da Ecma International 2015 beschlossen hat, auf jährliche Veröffentlichungen von ECMAScript umzusteigen. Dementsprechend hat Ecma International auch damit begonnen, neue Ausgaben der ECMAScript-Spezifikation basierend auf dem Jahr ihrer Veröffentlichung zu benennen. Kurz gesagt, ES6 und ES2015 sind zwei verschiedene Namen für dieselbe Sache.

Babel

Ein Transpiler, der ES6-Code in ES5-Code konvertieren kann.

Entwickler können die glänzenden neuen Funktionen von ES6 verwenden, sind jedoch möglicherweise besorgt über die browserübergreifende Kompatibilität für ihre Web-Apps. Zum Zeitpunkt des Schreibens dieses Artikels unterstützen Edge und Internet Explorer Funktionen aus der ES6-Spezifikation nicht vollständig.

Betroffene Entwickler können Babel verwenden, um ihren ES6-Code in eine funktional äquivalente Version zu konvertieren, die nur ES5-Funktionen verwendet. Alle gängigen Browser unterstützen ES5 vollständig, sodass sie den Code problemlos ausführen können.

Noch ein interessanter Leckerbissen

Ich hoffe, Sie fanden diese Informationen zu JavaScript und ECMAScript hilfreich. Bevor wir die Dinge hier zusammenfassen, möchte ich noch eine Information teilen, die für junge Webentwickler wie mich geklärt werden muss.

Huhn oder das Ei

Ein verwirrendes Stück Geschichte ist, dass JavaScript 1996 erstellt wurde. 1997 wurde es dann zur Standardisierung an Ecma International übermittelt, was zu ECMAScript führte. Gleichzeitig ist JavaScript ein Beispiel für eine ECMAScript-Implementierung, da JavaScript der ECMAScript-Spezifikation entspricht.

Das lässt uns mit dieser lustigen Tatsache zurück: ECMAScript basiert auf JavaScript und JavaScript basiert auf ECMAScript.

Ich kenne.

Es klingt genau wie die Zeitreise der Menschen, die ihre eigenen Eltern sind - ein bisschen wackelig, aber es macht Spaß, darüber nachzudenken.

Alle guten Dinge

Ich weiß, wir hatten alle Spaß hier, aber das waren viele Informationen, die man verdauen konnte. Ich werde diese Gelegenheit nutzen, um mich zu verabschieden.

Bitte hinterlassen Sie unten Fragen, Kommentare, Vorschläge oder Bedenken.

Vielen Dank fürs Lesen!