Quelle est la différence entre JavaScript et ECMAScript?

J'ai essayé de googler «la différence entre JavaScript et ECMAScript».

J'ai fini par devoir patauger dans une mer de résultats ambigus et apparemment contradictoires:

«ECMAScript est une norme.»

"JavaScript est une norme."

«ECMAScript est une spécification.»

"JavaScript est une implémentation de la norme ECMAScript."

"ECMAScript est un JavaScript standardisé."

«ECMAScript est un langage.»

«JavaScript est un dialecte d'ECMAScript.»

"ECMAScript est JavaScript."

Retenant l'envie de pleurer, j'ai résisté et j'ai décidé de m'engager dans des recherches douloureuses mais productives.

Cet article représente ma compréhension actuelle des différences entre JavaScript et ECMAScript. Il s'adresse aux personnes familiarisées avec JavaScript mais souhaitant une meilleure compréhension de sa relation avec ECMAScript, les navigateurs Web, Babel, etc. Vous apprendrez également sur les langages de script, les moteurs JavaScript et les environnements d'exécution JavaScript pour faire bonne mesure.

Alors laissez-vous pomper.

Un glossaire JavaScript / ECMAScript

Vous trouverez ci-dessous une liste de définitions, conçues dans un souci de cohérence et de clarté. Les définitions ne sont pas complètes à 100%. Ils sont construits de manière à fournir une compréhension de haut niveau de la connexion et de la relation entre JavaScript et ECMAScript.

Sans plus tarder, commençons.

Ecma International

Une organisation qui crée des normes pour les technologies.

Pour illustrer un exemple de «standard» (mais pas celui créé par Ecma), pensez à tous les claviers que vous avez déjà utilisés. La grande majorité avait-elle des lettres dans le même ordre, et une barre d'espace, une touche Entrée, des touches fléchées, avec des nombres affichés dans une rangée en haut? C'est parce que la plupart des fabricants de claviers basent leur conception de clavier sur la norme de disposition QWERTY.

ECMA-262

Il s'agit d'une norme publiée par Ecma International. Il contient la spécification d'un langage de script à usage général.

ECMA-262 est un standard comme QWERTY, mais au lieu de représenter une spécification de disposition de clavier, il représente une spécification de langage de script appelée ECMAScript.

Considérez ECMA-262 comme le numéro de référence d'ECMAScript.

Un langage de script

Un langage de programmation conçu spécifiquement pour agir sur une entité ou un système existant

Pour une idée générale de ce qui fait d'un langage de programmation un langage de script, considérez les commandes «marcher», «courir» et «sauter». Ces actions nécessitent quelque chose pour les réaliser, peut-être une personne, un chien ou un personnage de jeu vidéo. Sans un acteur pour exécuter ces commandes, «marcher», «courir» et «sauter» n'aurait aucun sens. Cet ensemble d'actions est analogue à un langage de script qui se concentre sur la manipulation d'une entité externe.

ECMAScript

La spécification définie dans ECMA-262 pour créer un langage de script à usage général.

Synonyme: spécification ECMAScript

Alors que ECMA-262 est le nom de la norme, il représente la spécification du langage de script ECMAScript.

ECMAScript fournit les règles, les détails et les directives qu'un langage de script doit observer pour être considéré comme conforme à ECMAScript.

JavaScript

Un langage de script à usage général conforme à la spécification ECMAScript.

JavaScript est le langage à saveur de café avec lequel j'aime programmer. ECMAScript est la spécification sur laquelle il est basé. En lisant la spécification ECMAScript, vous apprenez à créerun langage de script. En lisant la documentation JavaScript, vous apprenez à utiliser un langage de script.

Lorsque les gens appellent JavaScript un «dialecte du langage ECMAScript», ils l'entendent dans le même sens que lorsqu'ils parlent de dialectes anglais, français ou chinois. Un dialecte tire l'essentiel de son lexique et de sa syntaxe de sa langue parente, mais s'écarte suffisamment pour mériter une distinction.

JavaScript implémente principalement la spécification ECMAScript comme décrit dans ECMA-262, mais il existe quelques différences. Mozilla présente ici les fonctionnalités du langage non ECMAScript de JavaScript:

Un moteur JavaScript

Un programme ou un interpréteur qui comprend et exécute le code JavaScript.

Synonymes : interpréteur JavaScript, implémentation JavaScript

Les moteurs JavaScript se trouvent généralement dans les navigateurs Web, notamment V8 dans Chrome, SpiderMonkey dans Firefox et Chakra dans Edge. Chaque moteur est comme un module de langage pour son application, ce qui lui permet de prendre en charge un certain sous-ensemble du langage JavaScript.

Un moteur JavaScript pour un navigateur est comme la compréhension du langage pour une personne.Si nous revenons sur notre exemple des actions «marcher», «courir», «sauter», un moteur JavaScript est la partie d'une «entité» qui comprend réellement ce que signifient ces actions.

Cette analogie permet d'expliquer quelques choses sur les navigateurs:

Différences dans les performances du navigateur

Deux personnes peuvent reconnaître la commande «sauter», mais l'une peut réagir plus rapidement à la commande parce que la personne peut comprendre et traiter la commande plus rapidement que l'autre personne. De même, deux navigateurs peuvent comprendre le code JavaScript, mais l'un l'exécute plus rapidement car son moteur JavaScript est implémenté plus efficacement.

Différences dans la prise en charge du navigateur

Considérez les différences qui existent entre les personnes qui parlent la même langue. Même si beaucoup de gens parlent anglais, certains peuvent connaître certains mots, expressions et règles de syntaxe que d'autres ne connaissent pas, et vice versa. Les navigateurs sont de la même manière. Même si les moteurs JavaScript des navigateurs comprennent tous JavaScript, certains navigateurs ont une meilleure compréhension du langage que d'autres. Il existe des différences dans la manière dont les navigateurs prennent en charge la langue.

En ce qui concerne la prise en charge des navigateurs, les gens parlent généralement de «compatibilité ECMAScript» plutôt que de «compatibilité JavaScript», même si les moteurs JavaScript analysent et exécutent… enfin, JavaScript. Cela peut être un peu déroutant, mais il y a une explication.

Si vous vous souvenez bien, ECMAScript est une spécification de ce à quoi un langage de script pourrait ressembler. La sortie d'une nouvelle édition d'ECMAScript ne signifie pas que tous les moteurs JavaScript existants ont soudainement ces nouvelles fonctionnalités. Il appartient aux groupes ou organisations responsables des moteurs JavaScript de se tenir au courant de la dernière spécification ECMAScript et d'adopter ses modifications.

Par conséquent, les développeurs ont tendance à poser des questions telles que «Quelle version d'ECMAScript ce navigateur prend-il en charge?» ou "Quelles fonctionnalités ECMAScript ce navigateur prend-il en charge?" Ils veulent savoir si Google, Mozilla et Microsoft ont réussi à mettre à jour les moteurs JavaScript de leurs navigateurs - par exemple V8, SpiderMonkey et Chakra, respectivement - avec les fonctionnalités décrites dans le dernier ECMAScript.

Le tableau de compatibilité ECMAScript est une bonne ressource pour répondre à ces questions.

Si une nouvelle édition d'ECMAScript sort, les moteurs JavaScript n'intègrent pas l'ensemble de la mise à jour d'un seul coup. Ils intègrent les nouvelles fonctionnalités ECMAScript de manière incrémentielle, comme le montre cet extrait du journal des modifications JavaScript de Firefox:

Un runtime JavaScript

Environnement dans lequel le code JavaScript s'exécute et est interprété par un moteur JavaScript. Le runtime fournit les objets hôtes sur lesquels JavaScript peut fonctionner et avec lesquels il peut fonctionner.

Synonymes : Environnement hôte

Le moteur d'exécution JavaScript est «l'entité ou le système existant» mentionné dans la définition du langage de script. Le code passe par le moteur JavaScript, et une fois analysé et compris, une entité ou un système exécute les actions interprétées. Un chienmarche, une personnes'exécute, un personnage de jeu vidéo saute (ou dans le cas de l'image ci-dessus, des épaves).

Les applications se rendent disponibles pour les scripts JavaScript en fournissant des «objets hôtes» au moment de l'exécution. Du côté client, le moteur d'exécution JavaScript serait le navigateur Web, où les objets hôtes tels que les fenêtres et les documents HTML sont rendus disponibles pour la manipulation.

Avez-vous déjà travaillé avec la fenêtre ou les objets hôtes de document? Les objets de fenêtre et de document ne font pas réellement partie du langage JavaScript principal. Ce sont des API Web, des objets fournis par un navigateur jouant le rôle d'environnement hôte de JavaScript. Pour le côté serveur, le runtime JavaScript est Node.js. Les objets hôtes liés au serveur tels que le système de fichiers, les processus et les requêtes sont fournis dans Node.js.

Un point intéressant: différents runtimes JavaScript peuvent partager le même moteur JavaScript. V8, par exemple, est le moteur JavaScript utilisé à la fois dans Google Chrome et Node.js - deux environnements très différents.

ECMAScript 6

Il s'agit de la sixième édition de la norme ECMA-262 et présente des modifications et des améliorations majeures de la spécification ECMAScript.

Synonymes : ES6, ES2015 et ECMAScript 2015

Cette édition d'ECMAScript a changé son nom d'ES6 à ES2015 car en 2015, Ecma International a décidé de passer aux versions annuelles d'ECMAScript. En conséquence, Ecma International a également commencé à nommer les nouvelles éditions de la spécification ECMAScript en fonction de l'année de leur sortie. En bref, ES6 et ES2015 sont deux noms différents pour la même chose.

Babel

Un transpilateur qui peut convertir le code ES6 en code ES5.

Les développeurs peuvent utiliser les nouvelles fonctionnalités brillantes fournies avec ES6, mais peuvent être préoccupés par la compatibilité entre navigateurs pour leurs applications Web. Au moment de la rédaction de cet article, Edge et Internet Explorer ne prennent pas entièrement en charge les fonctionnalités de la spécification ES6.

Les développeurs concernés peuvent utiliser Babel pour convertir leur code ES6 en une version fonctionnellement équivalente qui n'utilise que les fonctionnalités ES5. Tous les principaux navigateurs prennent entièrement en charge ES5, ils peuvent donc exécuter le code sans aucun problème.

Une autre friandise intéressante

J'espère que vous avez trouvé ces informations sur JavaScript et ECMAScript utiles. Avant de conclure ici, j'aimerais partager une autre information qui doit être clarifiée pour les développeurs Web débutants comme moi.

Poulet ou œuf

Un peu déroutant de l'histoire est que JavaScript a été créé en 1996. Il a ensuite été soumis à Ecma International en 1997 pour une normalisation, ce qui a abouti à ECMAScript. Dans le même temps, étant donné que JavaScript est conforme à la spécification ECMAScript, JavaScript est un exemple d'implémentation ECMAScript.

Cela nous laisse avec ce fait amusant: ECMAScript est basé sur JavaScript, et JavaScript est basé sur ECMAScript.

Je sais.

Cela ressemble exactement au trope de voyage dans le temps des gens étant leur propre parent - un peu bancal, mais plutôt amusant à penser.

Toutes les bonnes choses

Je sais que nous nous sommes tous amusés ici, mais c'était beaucoup d'informations à digérer. Je saisis cette occasion pour vous dire adieu.

N'hésitez pas à laisser vos questions, commentaires, suggestions ou préoccupations ci-dessous.

Merci beaucoup d'avoir lu!