Qual è la differenza tra JavaScript ed ECMAScript?

Ho provato a cercare su Google "la differenza tra JavaScript ed ECMAScript".

Ho finito per dover guadare un mare di risultati ambigui e apparentemente contrastanti:

"ECMAScript è uno standard."

"JavaScript è uno standard."

"ECMAScript è una specifica."

"JavaScript è un'implementazione dello standard ECMAScript."

"ECMAScript è JavaScript standardizzato."

"ECMAScript è una lingua."

"JavaScript è un dialetto di ECMAScript."

"ECMAScript è JavaScript."

Trattenendo l'impulso di piangere, mi alzai e decisi di impegnarmi in una ricerca dolorosa ma produttiva.

Questo articolo rappresenta la mia attuale comprensione delle differenze tra JavaScript ed ECMAScript. È rivolto a persone che hanno familiarità con JavaScript ma desiderano una comprensione più chiara della sua relazione con ECMAScript, browser web, Babel e altro. Imparerai anche a conoscere linguaggi di scripting, motori JavaScript e runtime JavaScript per buona misura.

Quindi fatti pompare.

Un glossario JavaScript / ECMAScript

Di seguito è riportato un elenco di definizioni, progettate con particolare attenzione alla coerenza e alla chiarezza. Le definizioni non sono complete al 100%. Sono costruiti in modo da fornire una comprensione di alto livello della connessione e della relazione tra JavaScript ed ECMAScript.

Senza ulteriori indugi, iniziamo.

Ecma International

Un'organizzazione che crea standard per le tecnologie.

Per illustrare un esempio di “standard” (anche se non creato da Ecma), pensate a tutte le tastiere che avete mai utilizzato. La stragrande maggioranza aveva lettere nello stesso ordine e una barra spaziatrice, un tasto Invio, tasti freccia, con i numeri visualizzati in una riga in alto? Questo perché la maggior parte dei produttori di tastiere basa il design della tastiera sullo standard di layout QWERTY.

ECMA-262

Questo è uno standard pubblicato da Ecma International. Contiene le specifiche per un linguaggio di scripting generico.

ECMA-262 è uno standard come QWERTY, ma invece di rappresentare una specifica del layout di tastiera, rappresenta una specifica del linguaggio di scripting chiamata ECMAScript.

Pensa a ECMA-262 come al numero di riferimento di ECMAScript.

Un linguaggio di scripting

Un linguaggio di programmazione progettato specificamente per agire su un'entità o un sistema esistente

Per un'idea generale di ciò che rende un linguaggio di programmazione un linguaggio di scripting, considera i comandi "cammina", "corri" e "salta". Queste azioni richiedono qualcosa per eseguirle, forse una persona, un cane o un personaggio di un videogioco. Senza un attore che esegua questi comandi, "cammina", "corri" e "salta" non avrebbero senso. Questo insieme di azioni è analogo a un linguaggio di scripting incentrato sulla manipolazione di un'entità esterna.

ECMAScript

La specifica definita in ECMA-262 per la creazione di un linguaggio di scripting generico.

Sinonimo: specifica ECMAScript

Sebbene ECMA-262 sia il nome dello standard, rappresenta la specifica del linguaggio di scripting ECMAScript.

ECMAScript fornisce le regole, i dettagli e le linee guida che un linguaggio di scripting deve osservare per essere considerato conforme a ECMAScript.

JavaScript

Un linguaggio di scripting di uso generale conforme alla specifica ECMAScript.

JavaScript è il linguaggio al gusto di caffè con cui amo programmare. ECMAScript è la specifica su cui si basa. Leggendo la specifica ECMAScript, impari a creareun linguaggio di scripting. Leggendo la documentazione JavaScript, impari come utilizzare un linguaggio di scripting.

Quando le persone chiamano JavaScript un "dialetto del linguaggio ECMAScript", lo intendono nello stesso senso di quando parlano di dialetti inglese, francese o cinese. Un dialetto deriva la maggior parte del suo lessico e sintassi dalla sua lingua madre, ma devia abbastanza da meritare la distinzione.

JavaScript implementa principalmente la specifica ECMAScript come descritto in ECMA-262, ma esistono alcune differenze. Mozilla delinea le funzionalità del linguaggio non ECMAScript di JavaScript qui:

Un motore JavaScript

Un programma o un interprete che comprende ed esegue il codice JavaScript.

Sinonimi : interprete JavaScript, implementazione JavaScript

I motori JavaScript si trovano comunemente nei browser web, incluso V8 in Chrome, SpiderMonkey in Firefox e Chakra in Edge. Ogni motore è come un modulo del linguaggio per la sua applicazione, permettendogli di supportare un certo sottoinsieme del linguaggio JavaScript.

Un motore JavaScript per un browser è come la comprensione del linguaggio per una persona.Se rivisitiamo il nostro esempio delle azioni "cammina", "corri", "salta", un motore JavaScript è la parte di un '"entità" che comprende effettivamente il significato di queste azioni.

Questa analogia aiuta a spiegare alcune cose sui browser:

Differenze nelle prestazioni del browser

Due persone possono riconoscere il comando "salta", ma una può reagire al comando più velocemente perché la persona può capire ed elaborare il comando più velocemente dell'altra persona. Allo stesso modo, due browser possono comprendere il codice JavaScript, ma uno lo esegue più velocemente perché il suo motore JavaScript è implementato in modo più efficiente.

Differenze nel supporto del browser

Considera le differenze che esistono tra le persone che parlano la stessa lingua. Anche se molte persone parlano inglese, alcuni potrebbero conoscere alcune parole, espressioni e regole di sintassi che altri non conoscono e viceversa. I browser sono allo stesso modo. Anche se i motori JavaScript dei browser comprendono tutti JavaScript, alcuni browser hanno una comprensione del linguaggio maggiore rispetto ad altri. Esistono differenze nel modo in cui i browser supportano la lingua.

Per quanto riguarda il supporto del browser, le persone di solito parlano di "compatibilità ECMAScript" piuttosto che "compatibilità JavaScript", anche se i motori JavaScript analizzano ed eseguono ... beh, JavaScript. Questo può creare un po 'di confusione, ma c'è una spiegazione.

Se ricorderai, ECMAScript è una specifica per l' aspetto che potrebbe avere un linguaggio di scripting . Il rilascio di una nuova edizione di ECMAScript non significa che tutti i motori JavaScript esistenti abbiano improvvisamente queste nuove funzionalità. Spetta ai gruppi o alle organizzazioni responsabili dei motori JavaScript essere aggiornati sulle ultime specifiche ECMAScript e adottarne le modifiche.

Pertanto, gli sviluppatori tendono a porre domande come "Quale versione di ECMAScript supporta questo browser?" o "Quali funzioni ECMAScript supporta questo browser?" Vogliono sapere se Google, Mozilla e Microsoft sono riusciti ad aggiornare i motori JavaScript dei loro browser, ad esempio V8, SpiderMonkey e Chakra, rispettivamente, con le funzionalità descritte nell'ultimo ECMAScript.

La tabella di compatibilità ECMAScript è una buona risorsa per rispondere a queste domande.

Se esce una nuova edizione di ECMAScript, i motori JavaScript non integrano l'intero aggiornamento in una volta sola. Incorporano le nuove funzionalità ECMAScript in modo incrementale, come si vede in questo estratto dal changelog JavaScript di Firefox:

Un runtime JavaScript

L'ambiente in cui il codice JavaScript viene eseguito e viene interpretato da un motore JavaScript. Il runtime fornisce gli oggetti host su cui JavaScript può operare e lavorare.

Sinonimi : ambiente host

Il runtime JavaScript è l '"entità o sistema esistente" menzionato nella definizione del linguaggio di scripting. Il codice passa attraverso il motore JavaScript e, una volta analizzato e compreso, un'entità o un sistema esegue le azioni interpretate. Un canecammina, una personacorre, un personaggio di un videogioco salta (o, nel caso dell'immagine sopra, si schianta).

Le applicazioni si rendono disponibili allo scripting JavaScript fornendo "oggetti host" in fase di esecuzione. Per il lato client, il runtime JavaScript sarebbe il browser Web, in cui gli oggetti host come finestre e documenti HTML sono resi disponibili per la manipolazione.

Hai mai lavorato con la finestra o con gli oggetti host del documento? Gli oggetti finestra e documento non fanno effettivamente parte del linguaggio JavaScript principale. Sono API Web, oggetti forniti da un browser che funge da ambiente host di JavaScript. Per il lato server, il runtime JavaScript è Node.js. Gli oggetti host relativi al server come il file system, i processi e le richieste sono forniti in Node.js.

Un punto interessante: diversi runtime JavaScript possono condividere lo stesso motore JavaScript. V8, ad esempio, è il motore JavaScript utilizzato sia in Google Chrome che in Node.js, due ambienti molto diversi.

ECMAScript 6

È la sesta edizione dello standard ECMA-262 e presenta importanti modifiche e miglioramenti alla specifica ECMAScript.

Sinonimi : ES6, ES2015 e ECMAScript 2015

Questa edizione di ECMAScript ha cambiato nome da ES6 a ES2015 perché nel 2015 Ecma International ha deciso di passare alle versioni annuali di ECMAScript. Di conseguenza, Ecma International ha anche iniziato a nominare nuove edizioni della specifica ECMAScript in base all'anno in cui sono state rilasciate. In breve, ES6 e ES2015 sono due nomi diversi per la stessa cosa.

Babele

Un transpiler in grado di convertire il codice ES6 in codice ES5.

Gli sviluppatori possono utilizzare le nuove brillanti funzionalità fornite con ES6, ma potrebbero preoccuparsi della compatibilità tra browser per le loro app web. Al momento della stesura di questo articolo, Edge e Internet Explorer non supportano completamente le funzionalità della specifica ES6.

Gli sviluppatori interessati possono utilizzare Babel per convertire il loro codice ES6 in una versione funzionalmente equivalente che utilizza solo le funzionalità ES5. Tutti i principali browser supportano completamente ES5, quindi possono eseguire il codice senza problemi.

Un altro bocconcino interessante

Spero che tu abbia trovato utili queste informazioni su JavaScript e ECMAScript. Prima di concludere le cose qui, vorrei condividere un'altra informazione che deve essere chiarita per gli sviluppatori web alle prime armi come me.

Pollo o uovo

Un po 'di confusione nella storia è che JavaScript è stato creato nel 1996. È stato poi presentato a Ecma International nel 1997 per la standardizzazione, che ha portato a ECMAScript. Allo stesso tempo, poiché JavaScript è conforme alla specifica ECMAScript, JavaScript è un esempio di implementazione ECMAScript.

Questo ci lascia con questo fatto divertente: ECMAScript è basato su JavaScript e JavaScript è basato su ECMAScript.

Lo so.

Suona esattamente come il tropo del viaggio nel tempo delle persone che sono i propri genitori: un po 'traballante, ma divertente a cui pensare.

Tutte cose buone

So che ci siamo divertiti tutti qui, ma c'erano molte informazioni da digerire. Colgo l'occasione per dire addio.

Non esitate a lasciare domande, commenti, suggerimenti o dubbi di seguito.

Grazie mille per aver letto!