De nombreuses personnes ont demandé quelle est la relation entre JavaScript et ECMAScript ? Y avait-il des différences entre eux auparavant ? Aujourd'hui, je vais vous donner une explication détaillée de ces problèmes concernant JavaScript et ECMAScript.
J'ai essayé de rechercher sur Baidu "la différence entre JavaScript et ECMAScript".
En fin de compte, j'ai obtenu beaucoup de résultats déroutants et contradictoires :
"ECMAScript est la norme."
"JavaScript est la norme."
"ECMAScript est la spécification."
"JavaScript est l'implémentation de la norme ECMAScript. "
" ECMAScript est un JavaScript standardisé. "
" ECMAScript est un langage. "
" JavaScript est une branche d'ECMAScript.
« ECMAScript est du JavaScript. » 🎜>Tenez bon, ne pleure pas. Je me suis armé et j'ai décidé de faire des recherches douloureuses mais fructueuses.
Cet article représente ma compréhension actuelle des différences entre JavaScript et ECMAScript. Cet article s'adresse à ceux qui connaissent JavaScript mais souhaitent comprendre plus clairement son lien avec ECMAScript, les navigateurs Web, Babel, etc. Vous découvrirez également les langages de script, le moteur JavaScript et le runtime JavaScript.
Alors, remontez le moral.
Glossaire JavaScript/ECMAScript
Ce qui suit est une série de définitions conçues en mettant l'accent sur la cohérence et la clarté. La définition n’est pas complète. Ils sont conçus pour illustrer à un niveau élevé les connexions et les relations entre JavaScript et ECMAScript.
Sans plus tard, commençons.
Ecma International
Une organisation qui établit des normes en matière de science et de technologie.
Pour donner un exemple "standard" (bien que non inventé par Ecma), utilisons le clavier que nous avons utilisé. Est-ce qu'il contient la plupart des lettres dans le même ordre, une barre d'espace, une touche Entrée, des touches fléchées et les chiffres sur la rangée supérieure ? Cela est dû au fait que la plupart des fabricants de claviers basent leurs conceptions de clavier sur la norme de disposition QWERTY.
ECMA-262 Il s'agit d'une norme publiée par Ecma International. Il contient des spécifications pour un langage de script à usage général. ECMA-262 est une norme similaire à QWERTY, mais au lieu de présenter une spécification de couche clavier, elle présente une spécification pour un langage de script appelé ECMAScript. Considérez ECMA-262 comme numéro de référence pour ECMAScript.
Langage de script
Un langage de programmation conçu spécifiquement pour fonctionner sur une entité ou un système existant.
Pour une idée générale sur la façon de faire d'un langage de programmation un langage de script, considérons les commandes "walk", "run" et "jump". Ces actions nécessitent quelque chose pour les motiver, peut-être une personne, un chien ou un personnage de jeu vidéo. « marcher », « courir » et « sauter » n'ont aucun sens sans un opérateur pour exécuter ces commandes. Cet ensemble d'opérations est similaire aux langages de script axés sur la manipulation d'entités externes.
ECMAScript
La spécification définie dans ECMA-262 est une norme pour la création de langages de script à usage général.
Synonymes : spécification ECMAScript
Cependant, ECMA-262 est le nom de la norme, qui représente la spécification du langage de script ECMAScript.
ECMAScript fournit des règles, des détails et des directives que les langages de script doivent respecter. Ce sont les critères pour qu'ils soient considérés comme conformes à ECMAScript.
JavaScript
Un langage de script à usage général qui suit la spécification ECMAScript.
Il s'agit d'une version forkée du langage ECMAScript.
JavaScript est le langage au goût de café que j'aime programmer (en référence à la famille Java, ndlr). ECMAScript est la spécification sur laquelle il est basé. En lisant la spécification ECMAScript, vous apprendrez à créer un langage de script. En lisant la documentation JavaScript, vous apprendrez à utiliser le langage de script.
Lorsque les gens appellent JavaScript un « dialecte du langage ECMAScript », ils veulent dire la même chose que lorsqu'ils parlent des dialectes anglais, français ou chinois. Un dialecte tire l'essentiel de son vocabulaire et de sa grammaire de sa langue maternelle, mais s'en écarte suffisamment pour mériter de conserver ces différences.
JavaScript implémente la plupart des spécifications ECMAScript décrites dans ECMA-262, avec quelques différences. Mozilla présente ici les fonctionnalités du langage non-ECMAScript de JavaScript :
JavaScript Engine Un programme ou un interpréteur capable de comprendre et d'exécuter du code JavaScript.
Synonymes : interpréteur JavaScript, implémentation JavaScript
Les moteurs JavaScript sont couramment trouvés 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, lui permettant de prendre en charge un certain fork du langage JavaScript.
Le moteur JavaScript est pour le navigateur ce que les humains comprennent le langage. Si l'on reprend l'exemple de « marcher », « courir » et « sauter » dans nos comportements quotidiens, un moteur JavaScript est le mécanisme fondamental qui permet de véritablement comprendre le sens de ces actions.
Cette métaphore peut nous aider à expliquer quelque chose à propos des navigateurs :
Différences dans les performances des navigateurs
Deux personnes peuvent reconnaître la commande « sauter », mais une personne peut répondre à la commande plus rapidement que l'autre car elle comprend et traite la commande plus rapidement que l'autre. De même, les deux navigateurs comprennent le code JavaScript, mais l'un d'entre eux s'exécute plus rapidement car son moteur JavaScript est implémenté plus efficacement.
Différences dans la prise en charge des navigateurs Encore une fois, il existe des différences même entre les personnes qui parlent la même langue. Même si de nombreuses personnes parlent anglais, certaines connaissent certains mots, expressions et règles grammaticales que d’autres ne connaissent pas, et vice versa. Il en va de même pour les navigateurs. Bien que tous les moteurs JavaScript des navigateurs comprennent JavaScript, certains navigateurs comprennent mieux JavaScript que d’autres. Cette différence existe dans la prise en charge du navigateur pour JavaScript.
En ce qui concerne la prise en charge du navigateur, les gens parlent généralement de « compatibilité ECMAScript » plutôt que de « compatibilité JavaScript », même si le moteur JavaScript analyse et exécute JavaScript. Cette question est un peu compliquée et le tableau suivant peut l'expliquer.
Si vous vous en souvenez, ECMAScript est une spécification qui dicte à quoi peut ressembler un langage de script. La sortie d'une nouvelle version d'ECMAScript ne signifie pas que tous les moteurs JavaScript existants disposent soudainement de ces nouvelles fonctionnalités. Cela dépend si le groupe ou l'organisation responsable de ce moteur JavaScript souhaite mettre à jour vers la dernière spécification ECMAScript et adopter les modifications qu'elle apporte.
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 ? » si Google, Mozilla et Microsoft ont commencé à mettre à jour les moteurs JavaScript de leurs navigateurs, tels que V8, SpiderMonkey et Chakra, pour disposer de la dernière fonctionnalité ECMAScript.
La liste de compatibilité ECMASCript est une excellente référence pour les réponses à des questions comme celles-ci.
Si une nouvelle version d'ECMAScript est publiée, le moteur JavaScript n'intégrera pas toutes les mises à jour d'un coup. Ils ajouteront progressivement la fonctionnalité ECMAScript, ce qui ressort clairement de l'enregistrement des modifications JavaScript de Firefox :
Exécution JavaScript
L'environnement dans lequel le code JavaScript s'exécute et est interprété par le moteur JavaScript. Le runtime fournit des objets hôtes que JavaScript peut exécuter et manipuler.
Synonymes : Le runtime JavaScript de l'environnement hôte est "l'entité ou le système existant" mentionné dans la définition du langage de script. Le code est transmis via le moteur JavaScript et une fois analysé et compris, l'entité ou le système exécutera le comportement interprété. Un chien marche, une personne court, une mission de jeu vidéo saute (ou provoque des destructions comme dans l'exemple ci-dessus). Une application se rend disponible aux scripts JavaScript en fournissant un « objet hôte » au moment de l'exécution. Pour le client, le runtime JavaScript peut être un navigateur Web, auquel cas des objets hôtes tels que des fenêtres ou des documents HTML peuvent être utilisés à des fins de manipulation. Avez-vous déjà utilisé une fenêtre ou un objet hébergeant un document ? Les objets View et Document ne font pas vraiment partie du langage JavaScript principal. Ce sont des API Web, des objets fournis par le navigateur qui font office d'environnement d'hébergement JavaScript. Côté serveur, le runtime JavaScript est Node.js. Les objets d'hébergement liés au serveur tels que le système de fichiers, le traitement et les requêtes sont fournis dans Node.js. Un point intéressant est que différents environnements d'exécution JavaScript peuvent partager le même moteur JavaScript. V8, par exemple, est le moteur JavaScript utilisé à la fois par Google Chrome et Node.js, deux environnements complètement différents.
ECMAScript 6
Il s'agit de la sixième version de la norme ECMA-262 et présente des modifications et des améliorations significatives de la spécification ECMAScript.
Synonymes : ES6, ES2015 et ECMAScript 2015
Cette version d'ECMAScript a changé son nom de ES6 à ES2015 en raison de la décision d'Ecma International de publier ECMAScript une fois par an. En conséquence, Ecma International a également commencé à nommer de nouvelles versions de la spécification ECMAScript sur la base de celles publiées chaque année. En bref, ES6 et ES2015 sont deux noms différents pour la même chose.
Babel
Un transpilateur capable de convertir le code ES6 en code ES5.
Les développeurs peuvent profiter des nouvelles fonctionnalités flashy d'ES6 mais s'inquiètent de 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 Bable pour convertir le code ES6 en une version avec les mêmes fonctionnalités, mais en utilisant les fonctionnalités ES5. Tous les principaux navigateurs prennent entièrement en charge ES5, ils peuvent donc exécuter votre code sans aucun souci.
Une anecdote intéressante
J'espère que ces informations sur JavaScript et ECMAScript vous seront utiles. Avant de conclure, je souhaite partager un peu plus d'informations qui éclaireront un développeur Web débutant comme moi.
Lequel est arrivé en premier, la poule ou l'œuf
L'une des histoires déroutantes de JavaScript est qu'il a été développé en 1996. Il a ensuite été soumis à ECMA International pour des travaux de normalisation en 1997, qui ont conduit à la naissance d'ECMAScript. Dans le même temps, puisque JavaScript est cohérent avec la spécification ECMAScript, on peut dire que JavaScript est un exemple implémenté selon ECMAScript.
Ce qui nous intéresse, c'est que ECMAScript est basé sur JavaScript et que JavaScript est basé sur ECMAScript.
D'accord, je sais que cela ressemble à une personne voyageant dans le temps et devenant ses parents - un peu contradictoire, mais quand même assez drôle quand j'y pense.
Conclusion
Je sais que la lecture de cet article vous a apporté beaucoup de joie, mais la quantité d'informations reste quand même très riche. Je dois encore dire au revoir.
Si vous avez des questions, des commentaires, des suggestions ou des considérations, veuillez nous en informer.
Merci beaucoup d'avoir lu ceci !
Recommandations associées :
Retour simple en JavaScript au code supérieur et commentaires
Exemple d'implémentation JavaScript d'un menu déroulant
Connaissances de base ECMAScript_javascript
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!