ECMAScript 2015 (6th Edition)是目前ECMAScript语言规范的标准。通常被称为"ES2015",在SpiderMonkey 中它规定了 JavaScript 的实现标准, SpiderMonkey 是一个 JavaScript 引擎,被广泛用于火狐浏览器等谋智的众多产品中。
"ES.next" 的第一份工作草案 (基于 ECMAScript 5.1) 发布于 2011 年 7 月 12 日,代号为 "ES.next" 或 "Harmony"。2014 年 8 月,ECMAScript 2015 草案规范停止增加新的功能,开始进入稳定期与 bug 修复阶段。最终,ECMA-262 Edition 6 于 2015 年 6 月 17 日由 ECMA 联合大会 (ECMA General Assembly) 作为标准正式发布。它同时也是国际工业标准 ISO/IEC 16262:2016。
你可以通过 ecma-international.org 免费下载规范的 PDF 和 HTML 版本。
es-discuss 是 ECMAScript 规范的讨论与反馈渠道。
Firefox 已经支持的特性
这里列出的功能已经在Firefox中支持;每个特性后面标注了具体实现的浏览器版本。
标准库
Array
对象的补充
Array
iteration 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.copyWithin()
(Firefox 32)get Array[@@species]
(Firefox 48)
新的 Map 和 Set,以及 WeakMap
和 WeakSet
对象
Map
(Firefox 13)Map
iteration withfor...of
(Firefox 17)Map.prototype.forEach()
(Firefox 25)Map.prototype.entries()
,
Map.prototype.keys()
,
Map.prototype.values()
(Firefox 20)- Constructor argument:
new
(Firefox 37)Map
(null) - Monkey-patched
set()
in Constructor (Firefox 37) get Map[@@species]
(Firefox 41)
Set
(Firefox 13)Set
iteration 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
WeakMap
constructor (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:
新的 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)
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)
Object
对象的补充
Object.prototype.__proto__
已经被标准化Object.is()
(Firefox 22)Object.setPrototypeOf()
(Firefox 31)Object.assign()
(Firefox 34)Object.getOwnPropertySymbols()
(Firefox 33)
Date
对象的补充
Date.prototype
is an ordinary object (Firefox 41)- generic
Date.prototype.toString
(Firefox 41) Date.prototype[@@toPrimitive]
(Firefox 44)
新的 Promise 对象
Promise
(Firefox 24, 在 Firefox 29 中默认启用)
新的 Reflect 对象
RegExp
对象的补充
RegExp
sticky (y) flag (Firefox 38)RegExp
unicode (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)
String
对象的补充
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)
新的 Symbol 对象
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 已经合并到 ECMAScript 2015 中,不再具有自己单独的规范。
ArrayBuffer
get ArrayBuffer[@@species]
(Firefox 48)DataView
Int8Array
Uint8Array
Uint8ClampedArray
Int16Array
Uint16Array
Int32Array
Uint32Array
Float32Array
Float64Array
get %TypedArray%[@@species]
(Firefox 48)
表达式和操作符
- Spread operator for arrays (Firefox 16)
- use
Symbol.iterator
property (Firefox 36)
- use
- Spread operator for function calls (Firefox 27)
- use
Symbol.iterator
property (Firefox 36)
- use
语句
for...of
(Firefox 13)- works in terms of
.iterator()
and.next()
(Firefox 17) - use
"@@iterator"
property (Firefox 27) - use
Symbol.iterator
property (Firefox 36)
- works in terms of
函数
- 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)
其他特性
- 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)
和 ES2015 规范不兼容的特性
Firefox (部分)实现了以下特性,但是与规范不兼容。原因有如下几个:Firefox 是依据 ES 6 规范的早期草案来实现,或者 Firefox 是作为实验性特性来实现,而当时与之类似的特性还没有被添加到 ES2015 规范中。
- Legacy iterators and generators (JS 1.7, Firefox 2)
- Destructuring assignment (JS 1.7, Firefox 2) (ES2015 compliance bug 1055984)
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)