ECMAScript 2015 (sixième édition) est la version actuelle pour le langage ECMAScript. Couramment appelé « ES6 », c'est le standard qui définit l'implémentation de JavaScript, notamment pour SpiderMonkey, le moteur utilisé par Firefox et les autres applications Mozilla.
Cette version est appelée avec le nom de code « ES.next » ou « Harmony ». Les brouillons de spécification (aussi appelés drafts) se trouvent sur le wiki officiel d'ECMA. Le premier draft basé sur ECMAScript 5.1, a été publié le 12 juillet 2011 sous le nom « ES.next ». À partir d'août 2014, ECMAScript 6 n'a plus accepté de nouvelles fonctionnalités et a été stabilisé. Il a été officiellement approuvé et fut publié le 17 juin 2015 par l'assemblée générale ECMA. Ce standard apparaîtra également sur le standard international ISO/IEC 16262:2016.
Une version PDF et une version HTML du standard sont disponibles et peuvent être librement téléchargéees sur ecma-international.org.
La liste de diffusion es-discuss permet de discuter des standards ECMAScript.
Fonctionnalités d'ores et déjà supportées
Les fonctionnalités suivantes sont déjà implantées dans Firefox :
Bibliothèque standard
Ajouts à l'objet Array
Array
: itération grâce àfor...of
(Firefox 13)Array.from()
(Firefox 32)Array.of()
(Firefox 25)Array.prototype.fill()
(Firefox 31)Array.prototype.find()
,Array.prototype.findIndex()
(Firefox 25)Array.prototype.entries()
,
Array.prototype.keys()
(Firefox 28)Array.prototype.copyWithin()
(Firefox 32)get Array[@@species]
(Firefox 48)
Les objets Map
et Set
et leurs équivalents avec références faibles
Map
(Firefox 13)Map
: itération grâce àfor...of
(Firefox 17)Map.prototype.forEach()
(Firefox 25)Map.prototype.entries()
,
Map.prototype.keys()
,
Map.prototype.values()
(Firefox 20)- Argument pour le constructeur :
new
(Firefox 37)Map
(null) - Méthode
set()
corrigée (monkey-patched) avec le constructeur (Firefox 37) get Map[@@species]
(Firefox 41)
Set
(Firefox 13)Set
: itération grâce àfor...of
(Firefox 17)Set.prototype.forEach()
(Firefox 25)Set.prototype.entries()
,
Set.prototype.keys()
,
Set.prototype.values()
(Firefox 24)- Argument pour le constructeur :
new
(Firefox 37)Set
(null) - Méthode
add()
corrigée (monkey-patched) avec le constructeur (Firefox 37) get Set[@@species]
(Firefox 41)
WeakMap
(Firefox 6)WeakMap.clear()
(Firefox 20)- Argument itérable optionnel pour le constructeur
WeakMap
(Firefox 36) - Argumement pour le constructeur :
new
(Firefox 37)WeakMap
(null) - Méthode
set()
corrigée (monkey-patched) avec le constructor (Firefox 37)
WeakSet
(Firefox 34)- Constructor argument:
new
(Firefox 37)WeakSet
(null) - Monkey-patched
add()
in Constructor (Firefox 37)
- Constructor argument:
Nouvelles fonctions pour l'objet Math
Math.imul()
(Firefox 20)Math.clz32()
(Firefox 31)Math.fround()
(Firefox 26)Math.log10()
,Math.log2()
,Math.log1p()
,Math.expm1()
,Math.cosh()
,Math.sinh()
,Math.tanh()
,Math.acosh()
,Math.asinh()
,Math.atanh()
,Math.hypot()
,Math.trunc()
,Math.sign()
,Math.cbrt()
(Firefox 25)
Ajouts à l'objet Number
Number.isNaN()
(Firefox 16)Number.isFinite()
(Firefox 16)Number.isInteger()
(Firefox 16)Number.parseInt()
(Firefox 25)Number.parseFloat()
(Firefox 25)Number.EPSILON
(Firefox 25)Number.MAX_SAFE_INTEGER
,Number.MIN_SAFE_INTEGER
(Firefox 31)Number.isSafeInteger()
(Firefox 32)
Ajouts à l'objet Object
Object.prototype.__proto__
a été standardiséObject.is()
(Firefox 22)Object.setPrototypeOf()
(Firefox 31)Object.assign()
(Firefox 34)Object.getOwnPropertySymbols()
(Firefox 33)
Ajouts à l'objet Date
Date.prototype
est un objet ordinaire (Firefox 41)Date.prototype.toString
est générique (Firefox 41)Date.prototype[@@toPrimitive]
(Firefox 44)
Nouvel objet Promise
Promise
(Firefox 24, activé par défaut dans Firefox 29)
Nouvel objet Proxy
Proxy
(Firefox 18)- La trappe
preventExtensions()
(Firefox 22) - La trappe
isExtensible()
(Firefox 31) - Les trappes
getPrototypeOf()
etsetPrototypeOf()
(Firefox 49)
Nouvel objet Reflect
Ajouts à l'objet RegExp
RegExp
marqueur (flag) pour l'adhérence (y) (Firefox 38)RegExp
marqueur (flag) unicode (u) (Firefox 46)- Méthode générique
RegExp.prototype.toString()
(Firefox 39) RegExp.prototype[@@match]()
(Firefox 49)RegExp.prototype[@@replace]()
(Firefox 49)RegExp.prototype[@@search]()
(Firefox 49)RegExp.prototype[@@split]()
(Firefox 49)get RegExp[@@species]
(Firefox 49)
Ajouts à l'objet String
String.fromCodePoint()
(Firefox 29)String.prototype.codePointAt()
(Firefox 29)String.prototype.startsWith()
,String.prototype.endsWith()
(Firefox 17)String.prototype.includes()
(Firefox 40) (anciennement String.prototype.contains() (Firefox 17))String.prototype.repeat()
(Firefox 24)String.prototype.normalize()
(Firefox 31)String.raw()
(Firefox 34)- \u{XXXXXX} séquences d'échappement étendues pour Unicode (Firefox 40)
Nouvel objet Symbol
Symbol
(Firefox 36)Symbol.iterator
(Firefox 36)Symbol.for()
- registre global des différents symboles (Firefox 36)Symbol.match
(Firefox 40)Symbol.species
(Firefox 41)Symbol.toPrimitive
(Firefox 44)Symbol.prototype[@@toPrimitive]
(Firefox 44)Symbol.replace
(Firefox 49)Symbol.search
(Firefox 49)Symbol.split
(Firefox 49)Symbol.hasInstance
(Firefox 50)
Tableaux typés
Les tableaux typés sont désormais spécifiés par ECMAScript 6, ils ne suivent donc plus leur propre spécification.
ArrayBuffer
get ArrayBuffer[@@species]
(Firefox 48)DataView
Int8Array
Uint8Array
Uint8ClampedArray
Int16Array
Uint16Array
Int32Array
Uint32Array
Float32Array
Float64Array
get %TypedArray%[@@species]
(Firefox 48)
Expressions et opérateurs
new.target
(Firefox 41)- Opérateur de décomposition pour les tableaux (Firefox 16)
- Utilisation de la propriété
Symbol.iterator
(Firefox 36)
- Utilisation de la propriété
- Opérateur de décomposition pour les appels de fonction (Firefox 27)
- Utilisation de la propriété
Symbol.iterator
(Firefox 36)
- Utilisation de la propriété
Instructions
for...of
(Firefox 13)- Fonctionne au sens de
.iterator()
et.next()
(Firefox 17) - Utilise la propréité
"@@iterator"
(Firefox 27) - Utilise la propriété
Symbol.iterator
(Firefox 36)
- Fonctionne au sens de
Fonctions
- Paramètres du reste (Firefox 15)
- Paramètres par défaut (Firefox 15)
- Paramètres sans valeur par défaut après des paramètres avec défaut (Firefox 26)
- Paramètre par défaut et décomposition (Firefox 41)
- Fonctions fléchées (Firefox 22)
- Générateurs (fonctions génératrices) (Firefox 26)
arguments[@@iterator]
(Firefox 46)
Autres fonctionnalités
- Littéraux numériques binaires et octaux (Firefox 25)
- Gabarits de chaîne de caractères (Firefox 34)
- Littéral object : notation raccourcie pour les noms de propriétés (Firefox 33)
- Littéral objet : noms de propriétés calculés (Firefox 34)
- Littéral objet : notation raccourcie pour les noms de méthodes (Firefox 34)
Fonctionnalités non conformes avec ES6
Les fonctionnalités suivantes sont partiellement implantées dans Firefox et ne sont pas entièrement conformes à la spécification. Ceci s'explique parfois par le fait que leur implantation dans Firefox est basée sur une ancienne version de la spécification ou que l'implantation actuelle est une expérimentation pour une fonctionnalité qui était présente avant ES6 mais pas encore spécifiée au moment de l'implantation.
- Itérateurs et générateurs "historiques" (JS 1.7, Firefox 2)
- Itérateurs et générateurs ES6 implémentés avec Firefox 26+
- Affectation par décomposition (JS 1.7, Firefox 2) (conformité avec ES6 bug 1055984)
const
(JS 1.5, Firefox 1.0) (conformité avec ES6 bug 950547, implementé avec Firefox 51)let
(JS 1.7, Firefox 2) (conformité avec ES6 bug 950547, implementé avec Firefox 51)