Hvad er forskellen mellem JavaScript og ECMAScript?

Jeg har prøvet at google "forskellen mellem JavaScript og ECMAScript."

Jeg endte med at skulle vade gennem et hav af tvetydige og tilsyneladende modstridende resultater:

"ECMAScript er en standard."

"JavaScript er en standard."

"ECMAScript er en specifikation."

“JavaScript er en implementering af ECMAScript-standarden.”

"ECMAScript er standardiseret JavaScript."

"ECMAScript er et sprog."

"JavaScript er en dialekt af ECMAScript."

"ECMAScript er JavaScript."

Jeg holdt trangen til at græde tilbage og bøjede mig og besluttede at forpligte mig til smertefuld, men alligevel produktiv forskning.

Denne artikel repræsenterer min nuværende forståelse af forskellene mellem JavaScript og ECMAScript. Det er rettet mod folk, der er fortrolige med JavaScript, men som ønsker en klarere forståelse af dets forhold til ECMAScript, webbrowsere, Babel og mere. Du vil også lære om scripting-sprog, JavaScript-motorer og JavaScript-driftstider til en god målestok.

Så bliv pumpet.

En JavaScript / ECMAScript-ordliste

Nedenfor er en liste over definitioner designet med fokus på konsistens og klarhed. Definitionerne er ikke 100% komplette. De er konstrueret på en måde, der giver en høj forståelse af forbindelsen og forholdet mellem JavaScript og ECMAScript.

Uden yderligere ado, lad os komme i gang.

Ecma International

En organisation, der skaber standarder for teknologier.

For at illustrere et eksempel på "standard" (dog ikke en oprettet af Ecma), skal du tænke på alle de tastaturer, du nogensinde har brugt. Havde langt de fleste bogstaver i samme rækkefølge og en mellemrumstast, en Enter-tast, piletasterne med tal vist i en række øverst? Dette skyldes, at de fleste tastaturproducenter baserer deres tastaturdesign på QWERTY-layoutstandarden.

ECMA-262

Dette er en standard udgivet af Ecma International. Den indeholder specifikationen til et generelt script-sprog.

ECMA-262 er en standard som QWERTY, men i stedet for at repræsentere en tastaturlayoutspecifikation, repræsenterer den en scriptingsspecifikation kaldet ECMAScript.

Tænk på ECMA-262 som ECMAScript's referencenummer.

Et script-sprog

Et programmeringssprog designet specielt til at handle på en eksisterende enhed eller et eksisterende system

For en generel idé om, hvad der gør et programmeringssprog til et script-sprog, skal du overveje kommandoerne "gå", "løb" og "spring". Disse handlinger kræver noget for at udføre dem, måske en person, en hund eller et videospilkarakter. Uden en skuespiller til at udføre disse kommandoer ville "gå", "løbe" og "springe" ikke give mening. Dette sæt handlinger er analogt med et scriptingsprog, der fokuserer på at manipulere en ekstern enhed.

ECMAScript

Specifikationen defineret i ECMA-262 til oprettelse af et generelt script-sprog.

Synonym: ECMAScript-specifikation

Mens ECMA-262 er standardnavnet, repræsenterer det script-sprogspecifikationen ECMAScript.

ECMAScript indeholder de regler, detaljer og retningslinjer, som et script-sprog skal overholde for at blive betragtet som ECMAScript-kompatibelt.

JavaScript

Et script-sprog til generelle formål, der overholder ECMAScript-specifikationen.

JavaScript er det kaffesmagssprog, som jeg elsker at programmere. ECMAScript er den specifikation, den er baseret på. Ved at læse ECMAScript-specifikationen lærer du, hvordan du opretteret script-sprog. Ved at læse JavaScript-dokumentationen lærer du, hvordan du bruger et scriptingsprog.

Når folk kalder JavaScript for en "dialekt af ECMAScript-sproget", mener de det i samme forstand som når man taler om engelske, franske eller kinesiske dialekter. En dialekt stammer det meste af sit leksikon og syntaks fra sit modersprog, men afviger nok til at fortjene sondring.

JavaScript implementerer for det meste ECMAScript-specifikationen som beskrevet i ECMA-262, men der findes en håndfuld forskelle. Mozilla skitserer JavaScript's ikke-ECMAScript-sprogfunktioner her:

En JavaScript-motor

Et program eller en tolk, der forstår og udfører JavaScript-kode.

Synonymer : JavaScript-tolk, JavaScript-implementering

JavaScript-motorer findes almindeligvis i webbrowsere, herunder V8 i Chrome, SpiderMonkey i Firefox og Chakra i Edge. Hver motor er som et sprogmodul til sin applikation, så den understøtter en bestemt delmængde af JavaScript-sproget.

En JavaScript-motor til en browser er som sprogforståelse for en person.Hvis vi besøger vores eksempel på handlingerne "gå", "løb", "spring", er en JavaScript-motor den del af en "enhed", der faktisk forstår, hvad disse handlinger betyder.

Denne analogi hjælper med at forklare et par ting om browsere:

Forskelle i browserydelse

To personer kan genkende kommandoen ”spring”, men den ene reagerer muligvis hurtigere på kommandoen, fordi personen kan forstå og behandle kommandoen hurtigere end den anden person. Tilsvarende kan to browsere forstå JavaScript-kode, men den ene kører den hurtigere, fordi dens JavaScript-motor implementeres mere effektivt.

Forskelle i browsersupport

Overvej de forskelle, der findes mellem mennesker, der taler det samme sprog. Selvom mange mennesker taler engelsk, kan nogle måske kende nogle ord, udtryk og syntaksregler, som andre ikke gør, og omvendt. Browsere er på samme måde. Selvom JavaScript-motorerne i browsere alle forstår JavaScript, har nogle browsere større forståelse for sproget end andre. Der er forskelle i den måde, browsere understøtter sproget på.

Med hensyn til browsersupport taler folk normalt om "ECMAScript-kompatibilitet" snarere end "JavaScript-kompatibilitet", selvom JavaScript-motorer analyserer og udfører ... ja, JavaScript. Dette kan være lidt forvirrende, men der er en forklaring.

Hvis du husker, er ECMAScript en specifikation for, hvordan et script-sprog kunne se ud. At frigive en ny udgave af ECMAScript betyder ikke, at alle eksisterende JavaScript-motorer pludselig har disse nye funktioner. Det er op til de grupper eller organisationer, der er ansvarlige for JavaScript-motorer, at være opdaterede om den seneste ECMAScript-specifikation og vedtage dens ændringer.

Derfor har udviklere tendens til at stille spørgsmål som: "Hvilken version af ECMAScript understøtter denne browser?" eller "Hvilke ECMAScript-funktioner understøtter denne browser?" De vil vide, om Google, Mozilla og Microsoft er kommet rundt med at opdatere deres browsers JavaScript-motorer - for eksempel henholdsvis V8, SpiderMonkey og Chakra - med de funktioner, der er beskrevet i det seneste ECMAScript.

ECMAScript-kompatibilitetstabellen er en god ressource til at besvare disse spørgsmål.

Hvis en ny udgave af ECMAScript kommer ud, integrerer JavaScript-motorer ikke hele opdateringen på én gang. De inkorporerer de nye ECMAScript-funktioner trinvist, som det ses i dette uddrag fra Firefox's JavaScript-ændringslog:

En JavaScript-kørselstid

Miljøet, hvor JavaScript-koden kører og fortolkes af en JavaScript-motor. Runtime giver værtsobjekter, som JavaScript kan fungere på og arbejde med.

Synonymer : Værtsmiljø

JavaScript-runtime er den "eksisterende enhed eller system", der er nævnt i definitionen af ​​script-sprog. Koden passerer gennem JavaScript-motoren, og når enheden er analyseret og forstået, udfører en enhed eller et system de fortolkede handlinger. En hundgåture, en personkører, et videospilkarakter springer (eller i tilfælde af ovenstående billede, vrag).

Applikationer gør sig tilgængelige for JavaScript-scripting ved at levere "værtsobjekter" ved kørsel. For klientsiden ville JavaScript-runtime være webbrowseren, hvor værtsobjekter som windows og HTML-dokumenter gøres tilgængelige til manipulation.

Har du nogensinde arbejdet med vinduer eller dokumentværtsobjekter? Vindue- og dokumentobjekterne er faktisk ikke en del af det centrale JavaScript-sprog. De er web-API'er, objekter, der leveres af en browser, der fungerer som JavaScript-værtsmiljø. For serversiden er JavaScript-runtime Node.js. Serverrelaterede værtsobjekter såsom filsystemet, processer og anmodninger findes i Node.js.

Et interessant punkt: forskellige JavaScript-driftstider kan dele den samme JavaScript-motor. V8 er for eksempel JavaScript-motoren, der bruges i både Google Chrome og Node.js - to meget forskellige miljøer.

ECMAScript 6

Det er den sjette udgave af ECMA-262-standarden og indeholder store ændringer og forbedringer af ECMAScript-specifikationen.

Synonymer : ES6, ES2015 og ECMAScript 2015

Denne udgave af ECMAScript ændrede navn fra ES6 til ES2015, fordi Ecma International i 2015 besluttede at skifte til årlige udgivelser af ECMAScript. Derfor begyndte Ecma International også at navngive nye udgaver af ECMAScript-specifikationen baseret på det år, de blev frigivet. Kort sagt, ES6 og ES2015 er to forskellige navne på den samme ting.

Babel

En transpiller, der kan konvertere ES6-kode til ES5-kode.

Udviklere kan bruge de skinnende nye funktioner, der følger med ES6, men kan være bekymrede for kompatibilitet på tværs af browsere til deres webapps. På tidspunktet for skrivningen af ​​denne artikel understøtter Edge og Internet Explorer ikke funktioner fra ES6-specifikationen fuldt ud.

Bekymrede udviklere kan bruge Babel til at konvertere deres ES6-kode til en funktionelt ækvivalent version, der kun bruger ES5-funktioner. Alle de store browsere understøtter ES5 fuldt ud, så de kan køre koden uden problemer.

En mere interessant godbid

Jeg håber, du fandt disse oplysninger om JavaScript og ECMAScript nyttige. Før vi afslutter tingene her, vil jeg gerne dele endnu et stykke information, der skal afklares for nye webudviklere som mig.

Kylling eller ægget

En forvirrende del af historien er, at JavaScript blev oprettet i 1996. Derefter blev det sendt til Ecma International i 1997 til standardisering, hvilket resulterede i ECMAScript. Da JavaScript er i overensstemmelse med ECMAScript-specifikationen, er JavaScript et eksempel på en implementering af ECMAScript.

Det efterlader os med denne sjove kendsgerning: ECMAScript er baseret på JavaScript, og JavaScript er baseret på ECMAScript.

Jeg ved.

Det lyder nøjagtigt som den tidsrejse, hvor mennesker er deres egen forælder - lidt vanvittigt, men lidt sjovt at tænke på.

Alle gode ting

Jeg ved, at vi alle har haft det sjovt her, men det var en masse information at fordøje. Jeg benytter lejligheden til at sige farvel.

Du er velkommen til at efterlade spørgsmål, kommentarer, forslag eller bekymringer nedenfor.

Mange tak for læsningen!