Quelle est la différence entre JavaScript et ECMAScript?

462

Quelle est la différence entre ECMAScript et JavaScript? D'après ce que j'ai déduit, ECMAScript est la norme et JavaScript est l'implémentation. Est-ce correct?

Gars
la source

Réponses:

183

ECMAScript est le langage, alors que JavaScript, JScript et même ActionScript 3 sont appelés "dialectes". Wikipédia apporte un éclairage à ce sujet.

Ryan Florence
la source
9
ce qui serait vraiment bien, c'est une correspondance claire entre les versions JavaScript et ECMAScript, par exemple ES5 correspond à JS1.5 etc. ah je l'ai trouvé: en.wikipedia.org/wiki/JavaScript#Versions
Sam Joseph
2
@Sam - mise à jour du lien de Sam: en.wikipedia.org/wiki/JavaScript#Version_history
Rop
65
Sous-voté et surévalué Yang Li, car cette réponse en dit très peu et vous pointe essentiellement vers Wikipedia. La réponse de Yang Li est beaucoup plus détaillée et utile. De plus, que l'on soit la langue / standard et l'autre le dialecte, ou la mise en œuvre, etc. est ouvert à l'opinion, et non aux faits, d'après ce que je comprends. Alors que cette réponse fait apparaître que c'est un fait. Corrigez-moi si je me trompe. En fait, je dirais que la suggestion de cette réponse n'est même pas le consensus populaire. Comme la plupart voient ECMAScript a la norme et JavaScript comme langue.
redfox05
1
@Rop - Mise à jour de ce lien: en.wikipedia.org/wiki/ECMAScript#Version_correspondence
HDave
5
Je ne suis pas d'accord. ECMAScript est la spécification. JS, JScript, ActionScript sont des langages qui implémentent une telle spécification.
adripanico
611

Je pense qu'une petite leçon d'histoire est due.

JavaScript était à l'origine nommé Mocha et a été remplacé par Livescript, mais est finalement devenu JavaScript.

Il est important de noter que JavaScript est venu avant ECMAscript et l'historique vous dira pourquoi.

Pour commencer depuis le début, JavaScript a dérivé son nom de Java et initialement Brendan Eich (le créateur de JS) a été invité à développer un langage qui ressemblait à Java pour le Web pour Netscape.

Eich, cependant, a décidé que Java était trop compliqué avec toutes ses règles et a donc décidé de créer un langage plus simple que même un débutant pourrait coder. Cela est évident dans des choses comme le relâchement de la nécessité d'avoir un point-virgule.

Une fois le langage terminé, l'équipe marketing de Netscape a demandé à Sun de lui permettre de le nommer JavaScript comme un coup marketing et c'est pourquoi la plupart des gens qui n'ont jamais utilisé JavaScript pensent que c'est lié à Java.

Environ un an ou deux après la sortie de JavaScript dans le navigateur, IE de Microsoft a pris le langage et a commencé à faire ses propres implémentations telles que JScript. Dans le même temps, IE dominait le marché et peu de temps après que Netscape ait dû fermer son projet.

Avant que Netscape ne tombe en panne, ils ont décidé de lancer une norme qui guiderait le chemin de JavaScript, nommée ECMAScript.

ECMAScript a eu quelques versions et en 1999, ils ont publié leur dernière version (ECMAScript 3) avant de passer en hibernation pour les 10 prochaines années. Au cours de ces 10 années, Microsoft a dominé les scènes, mais en même temps, il n'améliorait pas son produit et, par conséquent, Firefox est né (dirigé par Eich) et tout un tas d'autres navigateurs tels que Chrome, Opera.

ECMAScript a publié sa 5e édition en 2009 (la 4e édition a été abandonnée) avec des fonctionnalités telles que le mode strict. Depuis lors, ECMAScript a pris beaucoup d'élan et devrait publier sa 6e édition dans quelques mois avec les plus grands changements qu'il a connus jusqu'à présent.

Vous pouvez utiliser une liste de fonctionnalités pour ECMAScript 6 ici http://kangax.github.io/es5-compat-table/es6/ ainsi que la prise en charge du navigateur. Vous pouvez même commencer à écrire Ecmascript 6 comme vous le faites avec CoffeeScript et utiliser un compilateur pour compiler vers Ecmascript 5.

Que ECMAScript soit la langue et que JavaScript soit un dialecte est discutable, mais pas important. Si vous continuez à penser ainsi, cela pourrait vous embrouiller. Il n'y a aucun compilateur qui exécuterait ECMAScript, et je crois que JavaScript est considéré comme le langage qui implémente une norme appelée ECMAScript.

Il existe également d'autres langages remarquables qui implémentent ECMAScript tels que ActionScript (utilisé pour Flash)

Yang Li
la source
1
Pour ceux intéressés par la façon de compiler / transpiler la nouvelle norme ES2015 jusqu'au code ECMAScript 5, vous voudrez consulter Babel (anciennement 6to5) disponible sur babeljs.io ou traceur sur github.com/google/traceur-compiler . Avec ces outils disponibles, il n'y a aucune raison pour laquelle vous ne pouvez pas commencer à écrire "nouveau JavaScript" en ce moment, et profiter de tous les derniers ajouts à la langue.
LWurm
1
Je n'étais pas au courant que Lua implémente ECMAScript. Je n'arrive pas à trouver quoi que ce soit qui corrobore cela. Quelle est votre source?
battmanz
2
@YangLi Êtes-vous d'accord avec la réponse de Jerone ci-dessous, selon laquelle les langages ECMAScript n'incluent pas l'API DOM que nous utilisons tous lors de l'écriture de JavaScript pur?
theJollySin
11
@theJollySin Oui, il a raison. ECMAScript n'a pas été conçu spécifiquement pour le navigateur, donc les méthodes comme document.getElementById et d'autres API DOM ne font pas partie de la norme. Ils appartiennent aux normes WHATWG, ainsi qu'à une autre méthode spécifique au navigateur comme localStorage, etc. Si vous prenez un nœud et n'utilisez aucun module importé, vous disposez de l'API ECMAScript uniquement.
Yang Li
1
Comment plusieurs langues peuvent-elles implémenter la même norme et ne pas être la même langue? La norme définit la langue. Si un langage implémente la norme C ++, il s'appelle C ++, pas autre chose (exactement parce qu'il implémente cette norme). J'ai donc toujours la même question ... quelle est la différence?
Neme
157

ECMAScript = ES:

  • ECMAScript est une norme pour les langages de script.

  • Des langages comme Javascript sont basés sur la norme ECMAScript.

  • ECMA Standard est basé sur plusieurs technologies d'origine, les plus connues étant JavaScript (Netscape) et JScript (Microsoft).

  • ECMA signifie European Computer Manufacturer's Association

JavaScript = JS:

  • JavaScript est l'implémentation la plus populaire de la norme ECMAScript.

  • Les fonctionnalités principales de Javascript sont basées sur la norme ECMAScript, mais Javascript possède également d'autres fonctionnalités supplémentaires qui ne figurent pas dans les spécifications / normes ECMA.

  • ActionScript et JScript sont d'autres langages qui implémentent ECMAScript.

  • JavaScript a été soumis à l'ECMA pour normalisation, mais en raison de problèmes de marque avec le nom Javascript, la norme est devenue ECMAScript.

  • Chaque navigateur possède un interpréteur JavaScript.

ES5 = ECMAScript 5:

  • ES5 est une version de ECMAScript (ancienne / actuelle).

  • ES5 est le JavaScript que vous connaissez et utilisez dans le navigateur aujourd'hui.

  • ES5 ne nécessite pas d'étape de construction (transpilers) pour le transformer en quelque chose qui fonctionnera dans les navigateurs d'aujourd'hui.

  • ECMAScript version 5 a été terminée en décembre 2009, les dernières versions de tous les principaux navigateurs (Chrome, Safari, Firefox et IE) ont implémenté la version 5.

  • La version 5.1 a été terminée en juin 2011.

ES6 = ECMAScript 6 = ES2015 = ECMAScript 2015:

  • ES2015 est une version d'ECMAScript (nouvelle / future).

  • Officiellement, le nom ES2015 doit être utilisé à la place de ES6.

  • ES6 corrigera bon nombre des lacunes du langage de base traitées dans TypeScript et CoffeeScript.

  • ES6 est la prochaine itération de JavaScript, mais il ne fonctionne pas dans les navigateurs actuels.

  • Il existe de nombreux transpilateurs qui exporteront ES5 pour les exécuter dans les navigateurs.

BabelJS:

  • BabelJS est le transpilateur le plus populaire qui transforme le nouveau JavaScript ES6 en ancien JavaScript ES5.

  • BabelJS permet d'écrire la prochaine génération de JavaScript aujourd'hui (signifie ES2015).

  • BabelJS prend simplement le fichier ES2015 et le transforme en fichier ES5.

  • Les versions actuelles des navigateurs peuvent désormais comprendre le nouveau code JavaScript (ES2015), même si elles ne le prennent pas encore en charge.

TypeScript et CoffeeScript:

  • Les deux fournissent du sucre syntaxique au-dessus d'ES5, puis sont transcompilés en JavaScript conforme à ES5. 

  • Vous écrivez TypeScript ou CoffeeScript puis le transpileur le transforme en JavaScript ES5.

Mahmoud Zalt
la source
3
" Javascript a également d'autres fonctionnalités supplémentaires qui ne sont pas dans les spécifications / normes ECMA " Pourriez-vous donner quelques exemples de ces fonctionnalités?
Aruna Herath
1
« JavaScript est l'implémentation la plus populaire du standard ECMAScript. » Alors, où puis-je trouver la source de cette implémentation appelée «JavaScript»?
bzeaman
7
Avec ma question, j'essaie de signaler une inexactitude potentielle dans le libellé de la réponse. Le mot «mise en œuvre» est utilisé. JavaScript est considéré comme «l' implémentation la plus populaire ». Une implémentation est une « réalisation d'une spécification technique». Ce qui se traduit par un logiciel . Alors je me demande où est ce logiciel appelé «JavaScript».
bzeaman
4
@Corrodias Je serais d'accord pour dire que cela ressemble à de la cueillette, mais je pense qu'il est judicieux de le faire lorsque la réponse consiste à définir les choses. JavaScript est un langage, aujourd'hui normalisé par ECMAscript comparable à la façon dont C est un langage normalisé par les normes ISO. Un terme pour JavaScript serait alors simplement «langage», rien de plus.
bzeaman
4
Les résumés d'ES5, ES2015 et BabelJS clarifient vraiment l'air sur beaucoup de confusions que l'on pourrait avoir quand il atterrit dans le monde des scripts JS d'aujourd'hui à partir de la programmation côté serveur. Très bonne réponse. +1
RBT
45

JavaScript = ECMAScript + DOM + BOM ;

  • La spécification du langage ECMAScript® définit toute la logique de création et d'édition d'objets, de tableaux, de nombres, etc.

  • DOM ( D ocument O bjet M odèle) permet de communiquer avec des documents HTML / XML (par exemple document.getElementById('id');).

  • BOM ( B rowser O bjet M odel) est la hiérarchie des objets de navigation (par exemple , l' objet de localisation, objet de l' histoire, les éléments de forme).

Historique de la dénomination JavaScript:

Mocha ► LiveScript ► JavaScript ► (une partie de JS a donné lieu) ECMA-262 ► ECMAScript ► JavaScript (se compose d'ECMAScript + DOM + BOM)

jerone
la source
7
Donc, ce qui est dans node.js n'est pas JavaScript? Parce qu'il n'a pas l'API DOM.
Aruna Herath
4
C'est correct. "Node.js est construit par rapport aux versions modernes de V8." & "V8 implémente ECMAScript comme spécifié dans ECMA-262, 5ème édition ..." & "Le DOM n'est pas, cependant, généralement fourni par le moteur JavaScript mais plutôt par un navigateur. Il en va de même pour V8 — Google Chrome fournit le DOM. " (Source: nodejs.org/en/docs/es6 & github.com/v8/v8/wiki/Introduction )
jerone
7
@jerone Quelle version d'ECMAScript est-ce que j'utilise quand j'écris du code JavaScript? Cela varie-t-il selon le navigateur ou la bibliothèque?
theJollySin
4
Pouvez-vous donner une référence à JavaScript = ECMAScript + DOM API;?
Koray Tugay
2
@ koray-tugay Sauf ici, il n'y a pas beaucoup de documentation sur ce qu'est exactement JavaScript. Je suppose que c'est pourquoi cette question est si populaire. La «formule» JavaScript = ECMAScript + DOM API;est simplement basée sur les termes documentés globaux convenus dont JavaScript est composé.
jerone
42

Techniquement, ECMAScript est le langage que tout le monde utilise et implémente - c'est la spécification créée il y a de nombreuses années lorsque Netscape et Microsoft se sont assis et ont tenté de normaliser les scripts entre JavaScript (langage de script de Netscape) et JScript (Microsoft).

Par la suite, tous ces moteurs implémentent ostensiblement ECMAScript, mais JavaScript (le nom) traîne maintenant pour les deux raisons de nommage traditionnelles et comme terme marketing par Mozilla pour leurs différentes extensions non standard (qu'ils veulent pouvoir réellement "version") )

olliej
la source
12
Netscape et Microsoft se sont bien entendus une fois?!
Cole Johnson
2
Je pensais que Brandon voulait faire de JS un standard avant Microsoft, et le seul qu'il pouvait trouver était ECMA.
Joe Simmons
30

Qu'est-ce que ECMAScript, c'est-à-dire ES?

ECMAScript est une norme pour un langage de script et le langage Javascript est basé sur la norme ECMAScript.

Javascript est-il exactement le même que ECMAScript?

  • Non, Javascript n'est pas exactement équivalent à ECMAScript.
  • Les fonctionnalités principales de Javascript sont basées sur la norme ECMAScript, mais Javascript possède également d'autres fonctionnalités supplémentaires qui ne figurent pas dans les spécifications / normes ECMA.

JavaScript = ECMAScript + API DOM;

API DOM comme: document.getElementById('id');

D'autres langues utilisent-elles la norme ECMAScript?

  • Oui, il existe des langages autres que JavaScript qui implémentent également la norme ECMAScript comme cœur.
  • ActionScript (utilisé par Adobe Flash) et JScript (utilisé par Microsoft) sont les deux langages qui implémentent la norme ECMAScript.

Pourquoi est-il appelé ECMAScript?

  • Javascript a été initialement créé chez Netscape, et ils voulaient standardiser la langue. Ainsi, ils ont soumis la langue à l' E enne C omputer M abricant de A ssociation (ECMA) pour la normalisation.
  • Mais, il y avait des problèmes de marque avec le nom Javascript, et la norme est devenue ECMAScript, qui est également le nom qu'elle contient aujourd'hui.
  • En raison de problèmes de marque, la version de Microsoft du langage s'appelle JScript - même si JScript est, à la base, le même langage que Javascript.
Imran Ahmad
la source
Il y a des cours sur JS ordinaire et ES6 JS. Lequel devrions-nous prendre? L'ES6 est-il plus utilisé dans les environnements professionnels? Merci.
MasterJoe2
16

Différentes versions de JavaScript sont des implémentations de la norme ECMAScript.

canne
la source
11

Je sais que c'est un ancien poste mais j'espère que cela aidera quelqu'un.

Dans les années 1990, différentes versions de js ont commencé à sortir comme javascript de netscape, script Js de Microsoft. Donc ecmascript a été introduit comme standard. Mais ecmascript ne forme qu'une partie de javascript qui spécifie sa syntaxe de base, ses types, ses objets, etc. Cela explique probablement les implémentations incohérentes de javascript dans diff. navigateurs

Référence - Wrox (Javascript professionnel pour les développeurs Web)

depz123
la source
10

A ma connaissance, ECMAScript est la "Théorie" ou "Spécification", et Javascript est "Pratique" ou "Implémentation".

Rethna
la source
10

JavaScript est un langage ECMAScript.

ECMAScript n'est pas nécessairement JavaScript.

ryansstack
la source
7

Les réponses existantes paraphrasent assez bien le point principal.

Le point principal est que ECMAScript est le langage abstrait nu, sans aucune extension spécifique au domaine, il est inutile en soi. La spécification définit uniquement le langage et les objets principaux de celui-ci.

Bien que JavaScript et ActionScript et d'autres dialectes y ajoutent la bibliothèque spécifique au domaine, vous pouvez donc l'utiliser pour quelque chose de significatif.

Il existe de nombreux moteurs ECMAScript , certains sont open source, d'autres sont propriétaires. Vous pouvez les lier à votre programme puis ajouter vos fonctions natives à l'objet global pour que votre programme devienne scriptable. Bien que le plus souvent, ils soient utilisés dans les navigateurs.

Calmarius
la source
5

Javascript était le nom d'origine, destiné à capitaliser sur la popularité de java. L'ECMA est l'organisme de normalisation qui supervise la norme qui a finalement été mise en place, de sorte que les noms sont à peu près équivalents.

Les implémentations ont d'autres noms, comme V8 ou Rhino, etc.

Jeremy Huiskamp
la source
3

ECMAScript est une norme pour JavaScrip t, regardez ces instructions de MDN :

entrez la description de l'image ici

Javascript

JavaScript (JS) est un langage de programmation léger interprété ou compilé par JIT avec des fonctions de première classe. Bien qu'il soit plus connu sous le nom de langage de script pour les pages Web, de nombreux environnements sans navigateur l'utilisent également, comme node.js, Apache CouchDB et Adobe Acrobat. JavaScript est un langage dynamique multi-paradigme basé sur des prototypes, prenant en charge les styles orientés objet, impératifs et déclaratifs (par exemple la programmation fonctionnelle). En savoir plus sur JavaScript.


ECMAScript

La norme pour JavaScript est ECMAScript . Depuis 2012, tous les navigateurs modernes prennent entièrement en charge ECMAScript 5.1. Les navigateurs plus anciens prennent en charge au moins ECMAScript 3. Le 17 juin 2015, ECMA International a publié la sixième version majeure d'ECMAScript, officiellement appelée ECMAScript 2015, et était initialement appelée ECMAScript 6 ou ES6. Depuis lors, les normes ECMAScript suivent des cycles de publication annuels. Cette documentation fait référence à la dernière version provisoire, qui est actuellement ECMAScript 2018.

Pour plus d'informations, visitez ici

Alireza
la source
3

Voici mes découvertes:

JavaScript: le guide définitif , écrit par David Flanagan fournit une explication très concise:

JavaScript a été créé chez Netscape au tout début du Web, et techniquement, "JavaScript" est une marque de commerce sous licence de Sun Microsystems (maintenant Oracle) utilisée pour décrire l'implémentation du langage par Netscape (maintenant Mozilla). Netscape a soumis la langue de normalisation à l'ECMA et en raison de problèmes de marque, la version standardisée de la langue a été bloquée avec le nom maladroit "ECMAScript". Pour les mêmes raisons de marque, la version de Microsoft du langage est officiellement connue sous le nom de "JScript". En pratique, presque tout le monde appelle le langage JavaScript.

Un article de blog de Microsoft semble d'accord avec ce que Flanagan explique en disant ..

ECMAScript est le nom officiel du langage JavaScript que nous connaissons et aimons tous.

.. ce qui me fait penser à toutes les occurrences JavaScriptdans ce poste de référence (par Microsoft à nouveau) doit être remplacé par ECMASCript. En fait, ils semblent être prudents en n'utilisant ECMAScriptque dans cette page de documentation plus récente et plus technique.

w3schools.com semble être d'accord avec les définitions ci-dessus:

JavaScript a été inventé par Brendan Eich en 1995 et est devenu une norme ECMA en 1997. ECMA-262 est le nom officiel de la norme. ECMAScript est le nom officiel de la langue.

La clé ici est: le nom officiel de la langue .

Si vous consultez les pages de version JavaScript de Mozilla , vous rencontrerez la déclaration suivante:

Obsolète. La version explicite et l'opt-in des fonctionnalités linguistiques étaient spécifiques à Mozilla et sont en cours de suppression. Firefox 4 était la dernière version faisant référence à une version JavaScript (1.8.5). Avec les nouvelles normes ECMA, les fonctionnalités du langage JavaScript sont désormais souvent mentionnées avec leur définition initiale dans les éditions ECMA-262 telles que ECMAScript 2015.

et lorsque vous voyez les notes de publication récentes, vous verrez toujours une référence aux normes ECMAScript, telles que:

  • La propriété ES2015 Symbol.toStringTag a été implémentée (bug 1114580).

  • Les méthodes ES2015 TypedArray.prototype.toString () et TypedArray.prototype.toLocaleString () ont été implémentées (bug 1121938).

Mozilla Web Docs a également une page qui explique la différence entre ECMAScript et JavaScript:

Cependant, le terme générique "JavaScript" tel qu'il est compris dans un contexte de navigateur Web contient plusieurs éléments très différents. L'un d'eux est le langage principal (ECMAScript), un autre est la collection des API Web, y compris le DOM (Document Object Model).

Conclusion

À ma connaissance, les gens utilisent le mot JavaScript de manière assez libérale pour faire référence à la spécification ECMAScript de base.

Je dirais que toutes les implémentations JavaScript modernes (ou moteurs JavaScript) sont en fait des implémentations ECMAScript. Vérifiez la définition du moteur V8 de Google, par exemple:

V8 est le moteur JavaScript hautes performances open source de Google, écrit en C ++ et utilisé dans Google Chrome, le navigateur open source de Google, et dans Node.js, entre autres. Il implémente ECMAScript comme spécifié dans ECMA-262.

Ils semblent utiliser le mot JavaScript et ECMAScript de manière interchangeable, et je dirais qu'il s'agit en fait d'un moteur ECMAScript?

Ainsi, la plupart des moteurs JavaScript implémentent en fait la norme ECMAScript, mais au lieu de les appeler moteurs ECMAScript, ils s'appellent eux-mêmes moteurs JavaScript. Cette réponse soutient également la façon dont je vois la situation.

Koray Tugay
la source
2

Je doute que nous utiliserions jamais le mot "ECMAScript" sans le fait que le nom "JavaScript" appartient à Sun. À toutes fins utiles, la langue est JavaScript. Vous n'allez pas à la librairie à la recherche de livres ECMAScript, n'est-ce pas?

C'est un peu trop simple de dire que "JavaScript" est l'implémentation. JScript est l'implémentation de Microsoft.

Nosredna
la source
1
Je n'ai pas de problème avec le mot ECMAscript ... avez-vous déjà pensé que c'est bizarre de dire MPEG, au lieu de vidéo?
ryansstack
7
Haha. N'est-ce pas Brendan Eich qui a dit que ECMAScript ressemblait à une maladie de peau? :-)
Nosredna
7
Sun possède le mot Java, pas JavaScript.
James R. Clayton
1
@ JamesR.Clayton JavaScript a été créé chez Netscape au tout début du Web, et techniquement, «JavaScript» est une marque de commerce sous licence de Sun Microsystems (maintenant Oracle) utilisée pour décrire l'implémentation du langage par Netscape (maintenant Mozilla).
Koray Tugay
1

JavaScript est une branche de langages formée autour de la norme ECMAScript. Je crois que l'ECMA est l'Association européenne des fabricants d'ordinateurs, pas que ce soit vraiment pertinent ou quoi que ce soit.

N'oubliez pas qu'un autre langage populaire formé autour de la norme ECMA Script est ActionScript, utilisé dans Adobe Flash / Flex.

JAL
la source