ECMAScript est un ensemble de normes concernant les langages de programmation de type script et standardisées par Ecma International dans le cadre de la spécification ECMA-262. Il s'agit donc d'un standard, dont les spécifications sont mises en œuvre dans différents langages de script, comme JavaScript ou ActionScript. C'est un langage de programmation orienté prototype.
Histoire et développement
LiveScript et Mosaic Communications Corporation La société Netscape, à l'origine connue sous le nom de Mosaic Communications Corporation, a développé un langage de script côté client, appelé LiveScript, pour renforcer l'offre commerciale de son serveur web. La sortie de LiveScript est intervenue à l'époque où le NCSA forçait Mosaic Communications Corporation à changer de nom pour devenir Netscape.
Netscape travailla alors au développement d'une version orientée client de LiveScript. Quelques jours avant sa sortie, Netscape changea le nom de LiveScript pour JavaScript. Sun Microsystems et Netscape étant partenaires, et la machine virtuelle Java étant de plus en plus populaire, ce changement de nom servait les intérêts des deux sociétés. Sun promit donc de ne pas poursuivre Netscape.
JavaScript et Netscape En , Sun et Netscape annoncent la sortie de JavaScript. En , Netscape implémente le moteur JavaScript dans son navigateur web Netscape Navigator 2.0. Le succès de ce navigateur contribue à l'adoption rapide de JavaScript dans le développement web orienté client. Microsoft réagit alors en développant JScript, qu'il inclut ensuite dans Internet Explorer 3.0 en pour la sortie de son navigateur.
Netscape soumet alors JavaScript à l'ECMA pour standardisation. Les travaux débutent en , et se terminent en par l'adoption du nouveau standard ECMAScript. Les spécifications sont rédigées dans le document Standard ECMA-262.
Versions
ECMA-262 Il existe à ce jour 17 versions du standard ECMA-262..
ECMAScript Edition 4 (ES4) Aujourd'hui abandonné au profit d'ES5, les premiers travaux furent critiqués car ils modifiaient la nature du langage, qui passait d'un modèle de programmation avec les prototypes vers un modèle traditionnel fondé sur les classes comme Java, C++ ou C#.
Ce modèle orienté prototype est pour beaucoup le modèle le plus performant en développement orienté objet.
Une première version du référentiel d'implémentation d'ECMAScript 4 est disponible depuis Publication d'un site web dédié..
Par ailleurs, Mozilla et Adobe Systems ont travaillé à l'implémentation des spécifications d'ECMAScript 4 dans JavaScript 2 et ActionScript 3. Pour concilier ces implémentations avec la création de la machine virtuelle Tamarin, Mozilla et Adobe Systems collaborent sur le projet Tamarin.
ECMAScript Edition 5 (ES5) À la suite des critiques envers ES4, un ensemble de sociétés, parmi lesquelles Yahoo, Microsoft et Google, décident de développer en parallèle une mise à jour de l'ES3 moins ambitieuse, nommée ES3.1.
Malgré les divergences d'option avec l'équipe consacrée à l'ES4, la décision est finalement prise d'arrêter le développement d'ES4 et de se consacrer exclusivement à l'ES3.1., qui deviendra ES5 pour éviter toute ambiguïté, et est publié le ..
L'ensemble de ces spécifications sont aujourd'hui bien intégrées dans les navigateurs modernes..
ECMAScript Edition 6 (ES6/ES2015) Nommée ES2015 et publiée en .. C'est une mise à jour majeure qui apporte un lot considérable de nouvelles fonctionnalités (déclaration de variables avec let et const, fonctions fléchées, littéraux de gabarits, destructuration, opérateurs rest et spread, paramètres par défaut dans les fonctions, raccourcis de propriétés dans les objets, promesses, set et map, itérateurs et générateurs). Notamment, le modèle de programmation orientée objet basé sur les classes est finalement intégré, mais dans une version simplifiée par rapport à ce qui était proposé depuis ES4. Aussi, un système de module permettant une gestion simplifiée des dépendances et une meilleure modularité du code source (via import et export) est disponible nativement et devient la norme.
L'implémentation de ES6 nécessitait autrefois d'être transpilée via un compilateur tel que Babel pour des soucis de compatibilité, mais elle est désormais prise en charge par toutes les versions récentes des navigateurs..
ECMAScript Edition 7 (ES7/ES2016)
Première version publiée après le changement du processus de normalisation, l'ES7, ou ES2016, apporte peu de changements au langage. Le nouveau processus prévoit en effet de publier chaque année une nouvelle norme avec les ajouts qui ont eu lieu dans l'intervalle, afin d'éviter de publier des changements énormes comme ce fut le cas en 2015..
ECMAScript Edition 8 (ES8/ES2017) Ajout de la syntaxe async / await pour la gestion des opérations asynchrones.
Comparatif ÉditionDate de publicationDifférences avec l'édition antérieure1Juin 1997 édition.2Juin 1998Modifications rédactionnelles pour se conformer au standard international ISO/CEI-16262.3Décembre 1999Expressions rationnelles plus puissantes, amélioration de la manipulation des chaînes de caractères, nouvelles instructions de contrôle, gestion des exception avec les instructions try/catch, formatage des nombres.4JamaisÉdition abandonnée.5Décembre 2009Clarification des ambiguïtés de la , accesseurs, introspection, contrôle des attributs, fonctions de manipulation de tableaux supplémentaires, support du format JSON, mode strict pour la vérification des erreurs.6Juin 2015Modules, classes, portée lexicale au niveau des blocs, itérateurs et générateurs, promesses pour la programmation asynchrone, patrons de destructuration, optimisation des appels terminaux, nouvelles structures de données (tableaux associatifs, ensembles, tableaux binaires), support de caractères Unicode supplémentaires dans les chaînes de caractères et les expressions rationnelles, possibilité d'étendre les structures de données prédéfinies.7Juin 2016Opérateur d'exponentiation, méthode includes sur les tableaux.8Juin 2017Syntaxe async / await pour la gestion des opérations asynchrones dans un style synchrone, méthodes entries, values et getOwnPropertyDescriptors sur l'objet global Object, remplissage des chaînes de caractères avec padStart et padEnd, virgule finale autorisée dans les paramètres de fonction, amélioration de la méthode SharedArrayBuffer et de l'API Atomics.9Juin 2018Opérateur spread (...) pour les objets, itération asynchrone avec for-await-of, ajout de la méthode finally sur les promesses, amélioration des expressions régulières et des littéraux de gabarits.10Juin 2019Méthodes flat et flatMap sur les tableaux, méthode fromEntries sur Object (l'inverse de entries), méthodes trimStart et trimEnd sur les chaînes, le paramètre d'erreur dans un bloc catch devient optionnel, ajout d'une propriété description sur les symboles, amélioration de la gestion du JSON (avec la méthode stringify) qui peut désormais gérer les émojis et les caractères non-ASCII, modification de la méthode toString sur les fonctions pour renvoyer leur code source complet.11Juin 2020Nouveau type BigInt pour gérer des très grands entiers, opérateur de coalescence des nuls (??) pour une gestion facilitée des valeurs null et undefined, opérateur de chainage optionnel (?.) pour accéder aux propriétés profondément imbriquées d'un objet sans vérification, import de module asynchrone avec la fonction import, méthode allSettled sur les promesses, référence uniforme au contexte global avec globalThis (au lieu de window, global ou self selon l'environnement), améliorations des boucles for-in et for-of, WeakRef et FinalizationRegistry pour la gestion avancée de la mémoire.12Juin 2021Trois nouveaux opérateurs logiques avec affectation (&&=, ||=, ??=), méthode replaceAll pour les chaînes, séparateurs numériques (_) pour améliorer la lisibilité des grands nombres, méthode any sur les promesses, nouveau type d'erreur AggregateError permettant de regrouper plusieurs erreurs en une seule, amélioration des expressions régulières afin de pouvoir récupérer les indices de correspondance.13Juin 2022L'accès à un élément spécifique d'un tableau peut se faire avec la méthode at, accès global à await dans les modules (évite d'avoir à l'envelopper dans une fonction async), propriétés et méthodes privées dans les classes via #, méthode hasOwn sur Object, l'erreur récupérée dans un bloc catch possède une propriété cause permettant d'obtenir plus de détails, ajout du flag v dans les expressions régulières pour améliorer la prise en charge des caractères Unicode, notamment les émojis. 14Juin 2023Méthodes findLast, findLastIndex, toSorted, toReversed, toSpliced sur les tableaux.15Juin 2024Méthode groupBy sur les objets et les maps, méthodes isWellFormed et toWellFormed sur les chaînes, méthode withResolvers sur Promise, les ArrayBuffers peuvent être redimensionnés et transférés. ESNext Juin 2025En cours de développement
E4X ECMAScript for XML (E4X) est une extension XML au langage ECMAScript. Il s'agit d'un standard différent ECMA-357..
Dénomination
ApplicationDénomination Dernière versionCorrespondance ECMAScript Navigateurs de type Gecko avec le moteur embarqué SpiderMonkey, dont Mozilla FirefoxJavaScript1.8ECMA-262, edition 3 1Internet ExplorerJScript5.6.7ECMA-262, edition 3 6OperaECMAScript, avec des extensions JavaScript et JScript1.3/1.5ECMA-262, edition 3Navigateurs fondés sur KHTML, incluant Konqueror de KDEJavaScript1.5ECMA-262Framework .NET de MicrosoftJScript .NET et Managed JScript8.0ECMA-262, edition 3 2Adobe FlashActionScript2 3ECMA-262, edition 3 3 ECMA-262, edition 4 4Adobe AcrobatJavaScript1.5ECMA-262, edition 3Langage de script généralDMDScript1.06ECMA-262OpenLaszlo PlatformJavaScript1.4ECMA-262, edition 3 5iCabInScript3.22ECMA-262, edition 3Implémentation d'XML dans les navigateurs fondés sur Gecko et les programmes embarqués comme SpiderMonkeyE4X???ECMA-357, edition 2
Note (1): E4X en partie supporté par Gecko 1.9 ; pour d'autres fonctionnalités.
Note (2): Microsoft indique que JScript 8.0 supporte « presque toutes les caractéristiques d'ECMAScript Edition 3" mais ne donne pas de liste des caractéristiques non supportées.
Note (3): En plus du support d'ECMA-262 edition 3, ActionScript 2 inclus aussi un support des propriétés, fonctions et mécanisme qui avaient été proposés dans une version préliminaire d'ECMA-262 edition 3. Il n'est pas connu si ActionScript restera synchronisé avec de futures modifications des spécifications d'ECMAScript.
Note (4): Adobe indique supporter une version préliminaire de l'édition 4 d'ECMA-262.
Note (5): OpenLaszlo supporte partiellement ECMA-262 édition 3.
Note (6): Un document « JScript Deviations from ES3 » a été publié par Microsoft.
Le support par Mozilla, (SpiderMonkey en langage C et Rhino en Java), sont utilisés par plusieurs programmes tiers, par exemple le Yahoo! Widget Engine (Konfabulator) et le langage de script pour Macintosh JavaScript OSA.
Safari utilise JavaScriptCore qui est fondé sur la bibliothèque KJS de KDE.
Correspondance
JavaScriptJScriptECMAScript1.0 (Netscape 2.0, mars 1996)1.0 (IE 3.0 — et première version, août 1996)1.1 (Netscape 3.0, août 1996)2.0 (IE 3.0 — dernière version, janvier 1997)1.2 (Netscape 4.0, juin 1997)1.3 (Netscape 4.5, octobre 1998)3.0 (IE 4.0, octobre 1997)édition 1 (juin 1997) / édition 2 (juin 1998)1.4 (Netscape Server uniquement)4.0 (Visual Studio 6, pas de nouvelle version d'IE)5.0 (IE 5.0, mars 1999)5.1 (IE 5.01)1.5 (Netscape 6.0, nov 2000 ; mais aussiplus tard les versions de Netscape et Mozilla)5.5 (IE 5.5, juillet 2000)édition 3 (décembre 1999)5.6 (IE 6.0, octobre 2001)1.6 (Gecko 1.8, Firefox 1.5, novembre 2005)édition 3, avec pour nouveautés: E4X, Array extras (e.g. Array.prototype.forEach), Array et String generics 1.7 (Gecko 1.8.1, Firefox 2.0, octobre 2006) 1.8 (Gecko 1.9, Firefox 3.0, mai 2007) 2.0édition 4 (en développement)
Annexes Notes et références
Articles connexes JavaScript