ECMAScript 2015 is the sixth edition of the ECMAScript Language Specification standard. It defines the standard for the JavaScript implementation in SpiderMonkey, the engine used in Firefox and other Mozilla applications.
Code-named "ES.next", "Harmony", or "ECMAScript 6", the first working draft (based on ECMAScript 5.1) was published on July 12, 2011 as "ES.next". In August 2014, the ECMAScript 2015 draft specification was feature frozen and went through a stabilization and bug fixing period. Finally, ECMA-262 Edition 6 got officially approved and published as a standard on June 17, 2015 by the ECMA General Assembly. It will also appear as the international industry standard ISO/IEC 16262:2016.
A PDF and HTML version of the standard can be freely downloaded on ecma-international.org.
A channel for feedback on ECMAScript standards is es-discuss.
Standard library
Additions to the Array object
Arrayiteration withfor...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.values()Array.prototype.copyWithin()(Firefox 32)get Array[@@species](Firefox 48)
New Map and Set objects, and their weak counterparts
Map(Firefox 13)Mapiteration withfor...of(Firefox 17)Map.prototype.forEach()(Firefox 25)Map.prototype.entries()(Firefox 20)Map.prototype.keys()(Firefox 20)Map.prototype.values()- Constructor argument:
new(Firefox 37)Map(null) - Monkey-patched
set()in Constructor (Firefox 37) get Map[@@species](Firefox 41)
Set(Firefox 13)Setiteration withfor...of(Firefox 17)Set.prototype.forEach()(Firefox 25)Set.prototype.entries(),
Set.prototype.keys(),
Set.prototype.values()(Firefox 24)- Constructor argument:
new(Firefox 37)Set(null) - Monkey-patched
add()in Constructor (Firefox 37) get Set[@@species](Firefox 41)
WeakMap(Firefox 6)WeakMap.clear()(Firefox 20)- optional iterable argument in
WeakMapconstructor (Firefox 36) - Constructor argument:
new(Firefox 37)WeakMap(null) - Monkey-patched
set()in Constructor (Firefox 37)
WeakSet(Firefox 34)- Constructor argument:
new(Firefox 37)WeakSet(null) - Monkey-patched
add()in Constructor (Firefox 37)
- Constructor argument:
New Math functions
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)
Additions to the Number object
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)
Additions to the Object object
Object.prototype.__proto__has been standardizedObject.is()(Firefox 22)Object.setPrototypeOf()(Firefox 31)Object.assign()(Firefox 34)Object.getOwnPropertySymbols()(Firefox 33)
Additions to the Date object
Date.prototypeis an ordinary object (Firefox 41)- generic
Date.prototype.toString(Firefox 41) Date.prototype[@@toPrimitive](Firefox 44)
New Promise object
Promise(Firefox 24, enabled by default in Firefox 29)
New Proxy object
Proxy(Firefox 18)preventExtensions()trap (Firefox 22)isExtensible()trap (Firefox 31)getPrototypeOf()andsetPrototypeOf()traps (Firefox 49)
New Reflect object
Reflect(Firefox 42)
Additions to the RegExp object
RegExpsticky (y) flag (Firefox 38)RegExpunicode (u) flag (Firefox 46)- generic
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)
Additions to the String object
String.fromCodePoint()(Firefox 29)String.prototype.codePointAt()(Firefox 29)String.prototype.startsWith(),String.prototype.endsWith()(Firefox 17)String.prototype.includes()(Firefox 40) (formerlyString.prototype.contains()(Firefox 17))String.prototype.repeat()(Firefox 24)String.prototype.normalize()(Firefox 31)String.raw()(Firefox 34)- \u{XXXXXX} Unicode code point escapes (Firefox 40)
New Symbol object
Symbol(Firefox 36)Symbol.iterator(Firefox 36)Symbol.for()- global Symbol registry (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)
Typed Arrays
Typed arrays are specified as part of ECMAScript 2015 and no longer in their own specification.
ArrayBufferget ArrayBuffer[@@species](Firefox 48)DataViewInt8ArrayUint8ArrayUint8ClampedArrayInt16ArrayUint16ArrayInt32ArrayUint32ArrayFloat32ArrayFloat64Arrayget %TypedArray%[@@species](Firefox 48)
Expressions and operators
- new.target (Firefox 41)
- Spread operator for arrays (Firefox 16)
- use
Symbol.iteratorproperty (Firefox 36)
- use
- Spread operator for function calls (Firefox 27)
- use
Symbol.iteratorproperty (Firefox 36)
- use
const(JS 1.5, Firefox 1.0) (ES2015 compliance bug 950547 implemented in Firefox 51)let(JS 1.7, Firefox 2) (ES2015 compliance bug 950547 implemented in Firefox 51)- Destructuring assignment (JS 1.7, Firefox 2) (ES2015 compliance bug 1055984)
Statements
for...of(Firefox 13)- works in terms of
.iterator()and.next()(Firefox 17) - use
"@@iterator"property (Firefox 27) - use
Symbol.iteratorproperty (Firefox 36)
- works in terms of
Functions
- Rest parameters (Firefox 15)
- Default parameters (Firefox 15)
- Parameters without defaults after default parameters (Firefox 26)
- Destructured parameters with default value assignment (Firefox 41)
- Arrow functions (Firefox 22)
Generator function(Firefox 26)arguments[@@iterator](Firefox 46)
Other features
- Binary and octal numeric literals (Firefox 25)
- Template strings (Firefox 34)
- Object initializer: shorthand property names (Firefox 33)
- Object initializer: computed property names (Firefox 34)
- Object initializer: shorthand method names (Firefox 34)
