Please note, this is a STATIC archive of website developer.mozilla.org from 03 Nov 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

Revision 1057518 of ECMAScript 6 support in Mozilla

  • Revision slug: Web/JavaScript/New_in_JavaScript/ECMAScript_6_support_in_Mozilla
  • Revision title: ECMAScript 6 support in Mozilla
  • Revision id: 1057518
  • Created:
  • Creator: fscholz
  • Is current revision? No
  • Comment add proxy object

Revision Content

{{jsSidebar("New_in_JS")}}

ECMAScript 2015 (6th Edition) is the current version of the ECMAScript Language Specification standard. Commonly referred to as "ES6", it defines the standard for the JavaScript implementation in SpiderMonkey, the engine used in Firefox and other Mozilla applications.

Code-named "ES.next" or "Harmony", the first working draft (based on ECMAScript 5.1) was published on July 12, 2011 as "ES.next". In August 2014, the ECMAScript 6 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.

Already supported by Firefox

The features listed here are already supported in Firefox; the version in which support was added is also indicated for each feature.

Standard library

Additions to the Array object

  • {{jsxref("Array")}} iteration with for...of (Firefox 13)
  • {{jsxref("Array.from()")}} (Firefox 32)
  • {{jsxref("Array.of()")}} (Firefox 25)
  • {{jsxref("Array.prototype.fill()")}} (Firefox 31)
  • {{jsxref("Array.prototype.find()")}}, {{jsxref("Array.prototype.findIndex()")}} (Firefox 25)
  • {{jsxref("Array.prototype.entries()")}},
    {{jsxref("Array.prototype.keys()")}} (Firefox 28)
  • {{jsxref("Array.prototype.copyWithin()")}} (Firefox 32)
  • {{jsxref("Array.@@species", "get Array[@@species]")}} (Firefox 48)

New Map and Set objects, and their weak counterparts

  • {{jsxref("Map")}} (Firefox 13)
    • {{jsxref("Map")}} iteration with for...of (Firefox 17)
    • {{jsxref("Map.prototype.forEach()")}} (Firefox 25)
    • {{jsxref("Map.prototype.entries()")}},
      {{jsxref("Map.prototype.keys()")}},
      {{jsxref("Map.prototype.values()")}} (Firefox 20)
    • Constructor argument: new {{jsxref("Map")}}(null) (Firefox 37)
    • Monkey-patched set() in Constructor (Firefox 37)
    • {{jsxref("Map.@@species", "get Map[@@species]")}} (Firefox 41)
  • {{jsxref("Set")}} (Firefox 13)
    • {{jsxref("Set")}} iteration with for...of (Firefox 17)
    • {{jsxref("Set.prototype.forEach()")}} (Firefox 25)
    • {{jsxref("Set.prototype.entries()")}},
      {{jsxref("Set.prototype.keys()")}},
      {{jsxref("Set.prototype.values()")}} (Firefox 24)
    • Constructor argument: new {{jsxref("Set")}}(null) (Firefox 37)
    • Monkey-patched add() in Constructor (Firefox 37)
    • {{jsxref("Set.@@species", "get Set[@@species]")}} (Firefox 41)
  • {{jsxref("WeakMap")}} (Firefox 6)
    • {{jsxref("WeakMap.clear()")}} (Firefox 20)
    • optional iterable argument in {{jsxref("WeakMap")}} constructor (Firefox 36)
    • Constructor argument: new {{jsxref("WeakMap")}}(null) (Firefox 37)
    • Monkey-patched set() in Constructor (Firefox 37)
  • {{jsxref("WeakSet")}} (Firefox 34)
    • Constructor argument: new {{jsxref("WeakSet")}}(null) (Firefox 37)
    • Monkey-patched add() in Constructor (Firefox 37)

New Math functions

  • {{jsxref("Math.imul()")}} (Firefox 20)
  • {{jsxref("Math.clz32()")}} (Firefox 31)
  • {{jsxref("Math.fround()")}} (Firefox 26)
  • {{jsxref("Math.log10()")}}, {{jsxref("Math.log2()")}}, {{jsxref("Math.log1p()")}}, {{jsxref("Math.expm1()")}}, {{jsxref("Math.cosh()")}}, {{jsxref("Math.sinh()")}}, {{jsxref("Math.tanh()")}}, {{jsxref("Math.acosh()")}}, {{jsxref("Math.asinh()")}}, {{jsxref("Math.atanh()")}}, {{jsxref("Math.hypot()")}}, {{jsxref("Math.trunc()")}}, {{jsxref("Math.sign()")}}, {{jsxref("Math.cbrt()")}} (Firefox 25)

Additions to the Number object

  • {{jsxref("Number.isNaN()")}} (Firefox 16)
  • {{jsxref("Number.isFinite()")}} (Firefox 16)
  • {{jsxref("Number.isInteger()")}} (Firefox 16)
  • {{jsxref("Number.parseInt()")}} (Firefox 25)
  • {{jsxref("Number.parseFloat()")}} (Firefox 25)
  • {{jsxref("Number.EPSILON")}} (Firefox 25)
  • {{jsxref("Number.MAX_SAFE_INTEGER")}}, {{jsxref("Number.MIN_SAFE_INTEGER")}} (Firefox 31)
  • {{jsxref("Number.isSafeInteger()")}} (Firefox 32)

Additions to the Object object

  • {{jsxref("Object.prototype.__proto__")}} has been standardized
  • {{jsxref("Object.is()")}} (Firefox 22)
  • {{jsxref("Object.setPrototypeOf()")}} (Firefox 31)
  • {{jsxref("Object.assign()")}} (Firefox 34)
  • {{jsxref("Object.getOwnPropertySymbols()")}} (Firefox 33)

Additions to the Date object

  • {{jsxref("Date.prototype")}} is an ordinary object (Firefox 41)
  • generic {{jsxref("Date.prototype.toString")}} (Firefox 41)
  • {{jsxref("Date.prototype.@@toPrimitive", "Date.prototype[@@toPrimitive]")}} (Firefox 44)

New Promise object

New Proxy object

  • {{jsxref("Proxy")}} (Firefox 18)
  • {{jsxref("Global_Objects/Proxy/handler/preventExtensions", "preventExtensions()")}} trap (Firefox 22)
  • {{jsxref("Global_Objects/Proxy/handler/isExtensible", "isExtensible()")}} trap (Firefox 31)
  • {{jsxref("Global_Objects/Proxy/handler/getPrototypeOf", "getPrototypeOf()")}} and {{jsxref("Global_Objects/Proxy/handler/setPrototypeOf", "setPrototypeOf()")}} traps (Firefox 49)

New Reflect object

Additions to the RegExp object

  • {{jsxref("RegExp")}} sticky (y) flag (Firefox 38)
  • {{jsxref("RegExp")}} unicode (u) flag (Firefox 46)
  • generic {{jsxref("RegExp.prototype.toString")}} (Firefox 39)
  • {{jsxref("RegExp.prototype.@@match()", "RegExp.prototype[@@match]()")}} (Firefox 49)
  • {{jsxref("RegExp.prototype.@@replace()", "RegExp.prototype[@@replace]()")}} (Firefox 49)
  • {{jsxref("RegExp.prototype.@@search()", "RegExp.prototype[@@search]()")}} (Firefox 49)
  • {{jsxref("RegExp.prototype.@@split()", "RegExp.prototype[@@split]()")}} (Firefox 49)
  • {{jsxref("RegExp.@@species", "get RegExp[@@species]")}} (Firefox 49)

Additions to the String object

  • {{jsxref("String.fromCodePoint()")}} (Firefox 29)
  • {{jsxref("String.prototype.codePointAt()")}} (Firefox 29)
  • {{jsxref("String.prototype.startsWith()")}}, {{jsxref("String.prototype.endsWith()")}} (Firefox 17)
  • {{jsxref("String.prototype.includes()")}} (Firefox 40) (formerly String.prototype.contains() (Firefox 17))
  • {{jsxref("String.prototype.repeat()")}} (Firefox 24)
  • {{jsxref("String.prototype.normalize()")}} (Firefox 31)
  • {{jsxref("String.raw()")}} (Firefox 34)
  • \u{XXXXXX} Unicode code point escapes (Firefox 40)

New Symbol object

Typed Arrays

Typed arrays are specified as part of ECMAScript 6 and no longer in their own specification.

  • {{jsxref("ArrayBuffer")}}
  • {{jsxref("ArrayBuffer.@@species", "get ArrayBuffer[@@species]")}} (Firefox 48)
  • {{jsxref("DataView")}}
  • {{jsxref("Int8Array")}}
  • {{jsxref("Uint8Array")}}
  • {{jsxref("Uint8ClampedArray")}}
  • {{jsxref("Int16Array")}}
  • {{jsxref("Uint16Array")}}
  • {{jsxref("Int32Array")}}
  • {{jsxref("Uint32Array")}}
  • {{jsxref("Float32Array")}}
  • {{jsxref("Float64Array")}}
  • {{jsxref("TypedArray.@@species", "get %TypedArray%[@@species]")}} (Firefox 48)

Expressions and operators

Statements

Functions

Other features

Features not compliant with the ES6 specification

The following features are (partially) implemented in Firefox, but are not compliant with the specification. There are a couple of possible reasons for this: Firefox's implementation is based on an older draft of the ES6 specification, or Firefox's current implementation is an experimental design added before a similar feature was added to the ES6 specification.

See also

Revision Source

<div>{{jsSidebar("New_in_JS")}}</div>

<p>ECMAScript 2015 (6th Edition) is the current version of the ECMAScript Language Specification standard. Commonly referred to as "ES6", it defines the standard for the <a href="/en-US/docs/Web/JavaScript">JavaScript</a> implementation in <a href="/en-US/docs/Mozilla/Projects/SpiderMonkey">SpiderMonkey</a>, the engine used in Firefox and other Mozilla applications.</p>

<p>Code-named "ES.next" or "Harmony", the first working draft (based on <a href="/en-US/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_5_support_in_Mozilla">ECMAScript 5.1</a>) was published on July 12, 2011 as "ES.next". In August 2014, the ECMAScript 6 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.</p>

<p>A <a href="https://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf">PDF</a> and <a href="https://www.ecma-international.org/ecma-262/6.0/index.html">HTML</a> version of the standard can be <a href="https://www.ecma-international.org/publications/standards/Ecma-262.htm">freely downloaded on ecma-international.org</a>.</p>

<p>A channel for feedback on ECMAScript standards is <a href="https://mail.mozilla.org/listinfo/es-discuss">es-discuss</a>.</p>

<h2 id="Already_supported_by_Firefox">Already supported by Firefox</h2>

<p>The features listed here are already supported in Firefox; the version in which support was added is also indicated for each feature.</p>

<h3 id="Standard_library">Standard library</h3>

<h4 id="Additions_to_the_Array_object">Additions to the <code>Array</code> object</h4>

<ul>
 <li>{{jsxref("Array")}} iteration with <code>for...of</code> (<a href="/en-US/Firefox/Releases/13">Firefox 13</a>)</li>
 <li>{{jsxref("Array.from()")}} (<a href="/en-US/Firefox/Releases/32">Firefox 32</a>)</li>
 <li>{{jsxref("Array.of()")}} (<a href="/en-US/Firefox/Releases/25">Firefox 25</a>)</li>
 <li>{{jsxref("Array.prototype.fill()")}} (<a href="/en-US/Firefox/Releases/31">Firefox 31</a>)</li>
 <li>{{jsxref("Array.prototype.find()")}}, {{jsxref("Array.prototype.findIndex()")}} (<a href="/en-US/Firefox/Releases/25">Firefox 25</a>)</li>
 <li>{{jsxref("Array.prototype.entries()")}},<br />
  {{jsxref("Array.prototype.keys()")}} (<a href="/en-US/Firefox/Releases/28">Firefox 28</a>)</li>
 <li>{{jsxref("Array.prototype.copyWithin()")}} (<a href="/en-US/Firefox/Releases/32">Firefox 32</a>)</li>
 <li>{{jsxref("Array.@@species", "get Array[@@species]")}} (<a href="/en-US/Firefox/Releases/48">Firefox 48</a>)</li>
</ul>

<h4 id="New_Map_and_Set_objects_and_their_weak_counterparts">New <code>Map</code> and <code>Set</code> objects, and their weak counterparts</h4>

<ul>
 <li>{{jsxref("Map")}} (<a href="/en-US/Firefox/Releases/13">Firefox 13</a>)

  <ul>
   <li>{{jsxref("Map")}} iteration with <code>for...of</code> (<a href="/en-US/Firefox/Releases/17">Firefox 17</a>)</li>
   <li>{{jsxref("Map.prototype.forEach()")}} (<a href="/en-US/Firefox/Releases/25">Firefox 25</a>)</li>
   <li>{{jsxref("Map.prototype.entries()")}},<br />
    {{jsxref("Map.prototype.keys()")}},<br />
    {{jsxref("Map.prototype.values()")}} (<a href="/en-US/Firefox/Releases/20">Firefox 20</a>)</li>
   <li>Constructor argument: <code>new {{jsxref("Map")}}(null)</code> (<a href="/en-US/Firefox/Releases/37">Firefox 37</a>)</li>
   <li>Monkey-patched <code>set()</code> in Constructor (<a href="/en-US/Firefox/Releases/37">Firefox 37</a>)</li>
   <li>{{jsxref("Map.@@species", "get Map[@@species]")}} (<a href="/en-US/Firefox/Releases/41">Firefox 41</a>)</li>
  </ul>
 </li>
 <li>{{jsxref("Set")}} (<a href="/en-US/Firefox/Releases/13">Firefox 13</a>)
  <ul>
   <li>{{jsxref("Set")}} iteration with <code>for...of</code> (<a href="/en-US/Firefox/Releases/17">Firefox 17</a>)</li>
   <li>{{jsxref("Set.prototype.forEach()")}} (<a href="/en-US/Firefox/Releases/25">Firefox 25</a>)</li>
   <li>{{jsxref("Set.prototype.entries()")}},<br />
    {{jsxref("Set.prototype.keys()")}},<br />
    {{jsxref("Set.prototype.values()")}} (<a href="/en-US/Firefox/Releases/24">Firefox 24</a>)</li>
   <li>Constructor argument: <code>new {{jsxref("Set")}}(null)</code> (<a href="/en-US/Firefox/Releases/37">Firefox 37</a>)</li>
   <li>Monkey-patched <code>add()</code> in Constructor (<a href="/en-US/Firefox/Releases/37">Firefox 37</a>)</li>
   <li>{{jsxref("Set.@@species", "get Set[@@species]")}} (<a href="/en-US/Firefox/Releases/41">Firefox 41</a>)</li>
  </ul>
 </li>
 <li>{{jsxref("WeakMap")}} (<a href="/en-US/Firefox/Releases/6">Firefox 6</a>)
  <ul>
   <li>{{jsxref("WeakMap.clear()")}} (<a href="/en-US/Firefox/Releases/20">Firefox 20</a>)</li>
   <li>optional iterable argument in {{jsxref("WeakMap")}} constructor (<a href="/en-US/Firefox/Releases/36">Firefox 36</a>)</li>
   <li>Constructor argument: <code>new {{jsxref("WeakMap")}}(null)</code> (<a href="/en-US/Firefox/Releases/37">Firefox 37</a>)</li>
   <li>Monkey-patched <code>set()</code> in Constructor (<a href="/en-US/Firefox/Releases/37">Firefox 37</a>)</li>
  </ul>
 </li>
 <li>{{jsxref("WeakSet")}} (<a href="/en-US/Firefox/Releases/34">Firefox 34</a>)
  <ul>
   <li>Constructor argument: <code>new {{jsxref("WeakSet")}}(null)</code> (<a href="/en-US/Firefox/Releases/37">Firefox 37</a>)</li>
   <li>Monkey-patched <code>add()</code> in Constructor (<a href="/en-US/Firefox/Releases/37">Firefox 37</a>)</li>
  </ul>
 </li>
</ul>

<h4 id="New_Math_functions">New <code>Math</code> functions</h4>

<ul>
 <li>{{jsxref("Math.imul()")}} (<a href="/en-US/Firefox/Releases/20">Firefox 20</a>)</li>
 <li>{{jsxref("Math.clz32()")}} (<a href="/en-US/Firefox/Releases/31">Firefox 31</a>)</li>
 <li>{{jsxref("Math.fround()")}} (<a href="/en-US/Firefox/Releases/26">Firefox 26</a>)</li>
 <li>{{jsxref("Math.log10()")}}, {{jsxref("Math.log2()")}}, {{jsxref("Math.log1p()")}}, {{jsxref("Math.expm1()")}}, {{jsxref("Math.cosh()")}}, {{jsxref("Math.sinh()")}}, {{jsxref("Math.tanh()")}}, {{jsxref("Math.acosh()")}}, {{jsxref("Math.asinh()")}}, {{jsxref("Math.atanh()")}}, {{jsxref("Math.hypot()")}}, {{jsxref("Math.trunc()")}}, {{jsxref("Math.sign()")}}, {{jsxref("Math.cbrt()")}} (<a href="/en-US/Firefox/Releases/25">Firefox 25</a>)</li>
</ul>

<h4 id="Additions_to_the_Number_object">Additions to the <code>Number</code> object</h4>

<ul>
 <li>{{jsxref("Number.isNaN()")}} (<a href="/en-US/Firefox/Releases/16">Firefox 16</a>)</li>
 <li>{{jsxref("Number.isFinite()")}} (<a href="/en-US/Firefox/Releases/16">Firefox 16</a>)</li>
 <li>{{jsxref("Number.isInteger()")}} (<a href="/en-US/Firefox/Releases/16">Firefox 16</a>)</li>
 <li>{{jsxref("Number.parseInt()")}} (<a href="/en-US/Firefox/Releases/25">Firefox 25</a>)</li>
 <li>{{jsxref("Number.parseFloat()")}} (<a href="/en-US/Firefox/Releases/25">Firefox 25</a>)</li>
 <li>{{jsxref("Number.EPSILON")}} (<a href="/en-US/Firefox/Releases/25">Firefox 25</a>)</li>
 <li>{{jsxref("Number.MAX_SAFE_INTEGER")}}, {{jsxref("Number.MIN_SAFE_INTEGER")}} (<a href="/en-US/Firefox/Releases/31">Firefox 31</a>)</li>
 <li>{{jsxref("Number.isSafeInteger()")}} (<a href="/en-US/Firefox/Releases/32">Firefox 32</a>)</li>
</ul>

<h4 id="Additions_to_the_Object_object">Additions to the <code>Object</code> object</h4>

<ul>
 <li>{{jsxref("Object.prototype.__proto__")}} has been standardized</li>
 <li>{{jsxref("Object.is()")}} (<a href="/en-US/Firefox/Releases/22">Firefox 22</a>)</li>
 <li>{{jsxref("Object.setPrototypeOf()")}} (<a href="/en-US/Firefox/Releases/31">Firefox 31</a>)</li>
 <li>{{jsxref("Object.assign()")}} (<a href="/en-US/Firefox/Releases/34">Firefox 34</a>)</li>
 <li>{{jsxref("Object.getOwnPropertySymbols()")}} (<a href="/en-US/Firefox/Releases/33">Firefox 33</a>)</li>
</ul>

<h4 id="Additions_to_the_Date_object">Additions to the <code>Date</code> object</h4>

<ul>
 <li>{{jsxref("Date.prototype")}} is an ordinary object (<a href="/en-US/Firefox/Releases/41">Firefox 41</a>)</li>
 <li>generic {{jsxref("Date.prototype.toString")}} (<a href="/en-US/Firefox/Releases/41">Firefox 41</a>)</li>
 <li>{{jsxref("Date.prototype.@@toPrimitive", "Date.prototype[@@toPrimitive]")}} (<a href="/en-US/Firefox/Releases/44">Firefox 44</a>)</li>
</ul>

<h4 id="New_Promise_object">New <code>Promise</code> object</h4>

<ul>
 <li>{{jsxref("Promise")}} (<a href="/en-US/Firefox/Releases/24">Firefox 24</a>, enabled by default in <a href="/en-US/Firefox/Releases/29">Firefox 29</a>)</li>
</ul>

<h4>New <code>Proxy</code> object</h4>

<ul>
 <li>{{jsxref("Proxy")}} (<a href="/en-US/Firefox/Releases/18">Firefox 18</a>)</li>
 <li>{{jsxref("Global_Objects/Proxy/handler/preventExtensions", "preventExtensions()")}} trap (<a href="/en-US/Firefox/Releases/22">Firefox 22</a>)</li>
 <li>{{jsxref("Global_Objects/Proxy/handler/isExtensible", "isExtensible()")}} trap (<a href="/en-US/Firefox/Releases/31">Firefox 31</a>)</li>
 <li>{{jsxref("Global_Objects/Proxy/handler/getPrototypeOf", "getPrototypeOf()")}} and&nbsp;{{jsxref("Global_Objects/Proxy/handler/setPrototypeOf", "setPrototypeOf()")}} traps (<a href="/en-US/Firefox/Releases/49">Firefox 49</a>)</li>
</ul>

<h4 id="New_Reflect_object">New <code>Reflect</code> object</h4>

<ul>
 <li>{{jsxref("Reflect")}} (<a href="/en-US/Firefox/Releases/42">Firefox 42</a>)</li>
</ul>

<h4 id="Additions_to_the_RegExp_object">Additions to the <code>RegExp</code> object</h4>

<ul>
 <li>{{jsxref("RegExp")}} sticky (y) flag (<a href="/en-US/Firefox/Releases/38">Firefox 38</a>)</li>
 <li>{{jsxref("RegExp")}} unicode (u) flag (<a href="/en-US/Firefox/Releases/46">Firefox 46</a>)</li>
 <li>generic {{jsxref("RegExp.prototype.toString")}} (<a href="/en-US/Firefox/Releases/39">Firefox 39</a>)</li>
 <li>{{jsxref("RegExp.prototype.@@match()", "RegExp.prototype[@@match]()")}} (<a href="/en-US/Firefox/Releases/49">Firefox 49</a>)</li>
 <li>{{jsxref("RegExp.prototype.@@replace()", "RegExp.prototype[@@replace]()")}} (<a href="/en-US/Firefox/Releases/49">Firefox 49</a>)</li>
 <li>{{jsxref("RegExp.prototype.@@search()", "RegExp.prototype[@@search]()")}} (<a href="/en-US/Firefox/Releases/49">Firefox 49</a>)</li>
 <li>{{jsxref("RegExp.prototype.@@split()", "RegExp.prototype[@@split]()")}} (<a href="/en-US/Firefox/Releases/49">Firefox 49</a>)</li>
 <li>{{jsxref("RegExp.@@species", "get RegExp[@@species]")}} (<a href="/en-US/Firefox/Releases/49">Firefox 49</a>)</li>
</ul>

<h4 id="Additions_to_the_String_object">Additions to the <code>String</code> object</h4>

<ul>
 <li>{{jsxref("String.fromCodePoint()")}} (<a href="/en-US/Firefox/Releases/29">Firefox 29</a>)</li>
 <li>{{jsxref("String.prototype.codePointAt()")}} (<a href="/en-US/Firefox/Releases/29">Firefox 29</a>)</li>
 <li>{{jsxref("String.prototype.startsWith()")}}, {{jsxref("String.prototype.endsWith()")}} (<a href="/en-US/Firefox/Releases/17">Firefox 17</a>)</li>
 <li>{{jsxref("String.prototype.includes()")}} (<a href="/en-US/Firefox/Releases/40">Firefox 40</a>) (formerly <code>String.prototype.contains()</code> (<a href="/en-US/Firefox/Releases/17">Firefox 17</a>))</li>
 <li>{{jsxref("String.prototype.repeat()")}} (<a href="/en-US/Firefox/Releases/24">Firefox 24</a>)</li>
 <li>{{jsxref("String.prototype.normalize()")}} (<a href="/en-US/Firefox/Releases/31">Firefox 31</a>)</li>
 <li>{{jsxref("String.raw()")}} (<a href="/en-US/Firefox/Releases/34">Firefox 34</a>)</li>
 <li><a href="/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Unicode_code_point_escapes">\u{XXXXXX}</a> Unicode code point escapes (<a href="/en-US/Firefox/Releases/40">Firefox 40</a>)</li>
</ul>

<h4 id="New_Symbol_object">New <code>Symbol</code> object</h4>

<ul>
 <li>{{jsxref("Symbol")}} (<a href="/en-US/Firefox/Releases/36">Firefox 36</a>)</li>
 <li>{{jsxref("Symbol.iterator")}} (<a href="/en-US/Firefox/Releases/36">Firefox 36</a>)</li>
 <li>{{jsxref("Symbol.for()")}} - global Symbol registry (<a href="/en-US/Firefox/Releases/36">Firefox 36</a>)</li>
 <li>{{jsxref("Symbol.match")}} (<a href="/en-US/Firefox/Releases/40">Firefox 40</a>)</li>
 <li>{{jsxref("Symbol.species")}} (<a href="/en-US/Firefox/Releases/41">Firefox 41</a>)</li>
 <li>{{jsxref("Symbol.toPrimitive")}} (<a href="/en-US/Firefox/Releases/44">Firefox 44</a>)</li>
 <li>{{jsxref("Symbol.prototype.@@toPrimitive", "Symbol.prototype[@@toPrimitive]")}} (<a href="/en-US/Firefox/Releases/44">Firefox 44</a>)</li>
 <li>{{jsxref("Symbol.replace")}} (<a href="/en-US/Firefox/Releases/49">Firefox 49</a>)</li>
 <li>{{jsxref("Symbol.search")}} (<a href="/en-US/Firefox/Releases/49">Firefox 49</a>)</li>
 <li>{{jsxref("Symbol.split")}} (<a href="/en-US/Firefox/Releases/49">Firefox 49</a>)</li>
</ul>

<h4 id="Typed_Arrays">Typed Arrays</h4>

<p>Typed arrays are specified as part of ECMAScript 6 and no longer in <a href="https://www.khronos.org/registry/typedarray/specs/latest/">their own specification</a>.</p>

<ul>
 <li>{{jsxref("ArrayBuffer")}}</li>
 <li>{{jsxref("ArrayBuffer.@@species", "get ArrayBuffer[@@species]")}} (<a href="/en-US/Firefox/Releases/48">Firefox 48</a>)</li>
 <li>{{jsxref("DataView")}}</li>
 <li>{{jsxref("Int8Array")}}</li>
 <li>{{jsxref("Uint8Array")}}</li>
 <li>{{jsxref("Uint8ClampedArray")}}</li>
 <li>{{jsxref("Int16Array")}}</li>
 <li>{{jsxref("Uint16Array")}}</li>
 <li>{{jsxref("Int32Array")}}</li>
 <li>{{jsxref("Uint32Array")}}</li>
 <li>{{jsxref("Float32Array")}}</li>
 <li>{{jsxref("Float64Array")}}</li>
 <li>{{jsxref("TypedArray.@@species", "get %TypedArray%[@@species]")}} (<a href="/en-US/Firefox/Releases/48">Firefox 48</a>)</li>
</ul>

<h3 id="Expressions_and_operators">Expressions and operators</h3>

<ul>
 <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/new.target">new.target</a> (<a href="/en-US/Firefox/Releases/41">Firefox 41</a>)</li>
 <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator">Spread operator for arrays</a> (<a href="/en-US/Firefox/Releases/16">Firefox 16</a>)
  <ul>
   <li>use <code>Symbol.iterator</code> property (<a href="/en-US/Firefox/Releases/36">Firefox 36</a>)</li>
  </ul>
 </li>
 <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Spread_operator">Spread operator for function calls</a> (<a href="/en-US/Firefox/Releases/27">Firefox 27</a>)
  <ul>
   <li>use <code>Symbol.iterator</code> property (<a href="/en-US/Firefox/Releases/36">Firefox 36</a>)</li>
  </ul>
 </li>
</ul>

<h3 id="Statements">Statements</h3>

<ul>
 <li><a href="/en-US/docs/Web/JavaScript/Reference/Statements/for...of"><code>for...of</code></a> (<a href="/en-US/Firefox/Releases/13">Firefox 13</a>)

  <ul>
   <li>works in terms of <code>.iterator()</code> and <code>.next()</code> (<a href="/en-US/Firefox/Releases/17">Firefox 17</a>)</li>
   <li>use <code>"@@iterator"</code> property (<a href="/en-US/Firefox/Releases/27">Firefox 27</a>)</li>
   <li>use <code>Symbol.iterator</code> property (<a href="/en-US/Firefox/Releases/36">Firefox 36</a>)</li>
  </ul>
 </li>
</ul>

<h3 id="Functions">Functions</h3>

<ul>
 <li><a href="/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/rest_parameters">Rest parameters</a> (<a href="/en-US/Firefox/Releases/15">Firefox 15</a>)</li>
 <li><a href="/en-US/docs/Web/JavaScript/Reference/default_parameters">Default parameters</a> (<a href="/en-US/Firefox/Releases/15">Firefox 15</a>)
  <ul>
   <li>Parameters without defaults after default parameters (<a href="/en-US/Firefox/Releases/26">Firefox 26</a>)</li>
   <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Default_parameters#Destructured_parameter_with_default_value_assignment" title="Default function parameters allow formal parameters to be initialized with default values if no value or undefined is passed.">Destructured parameters with default value assignment</a> (<a href="/en-US/Firefox/Releases/41">Firefox 41</a>)</li>
  </ul>
 </li>
 <li><a href="/en-US/docs/Web/JavaScript/Reference/arrow_functions">Arrow functions</a> (<a href="/en-US/Firefox/Releases/22">Firefox 22</a>)</li>
 <li>{{jsxref("Statements/function*", "Generator function")}} (<a href="/en-US/Firefox/Releases/26">Firefox 26</a>)
  <ul>
   <li>{{jsxref("Operators/yield", "yield")}} (<a href="/en-US/Firefox/Releases/26">Firefox 26</a>)</li>
   <li>{{jsxref("Operators/yield*", "yield*")}} (<a href="/en-US/Firefox/Releases/27">Firefox 27</a>)</li>
  </ul>
 </li>
 <li>{{jsxref("Functions/arguments/@@iterator", "arguments[@@iterator]")}} (<a href="/en-US/Firefox/Releases/46">Firefox 46</a>)</li>
</ul>

<h3 id="Other_features">Other features</h3>

<ul>
 <li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Numeric_literals">Binary and octal numeric literals</a> (<a href="/en-US/Firefox/Releases/25">Firefox 25</a>)</li>
 <li><a href="/en-US/docs/Web/JavaScript/Reference/template_strings">Template strings</a> (<a href="/en-US/Firefox/Releases/34">Firefox 34</a>)</li>
 <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#Property_definitions">Object initializer: shorthand property names</a> (<a href="/en-US/Firefox/Releases/33">Firefox 33</a>)</li>
 <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#Computed_property_names">Object initializer: computed property names</a> (<a href="/en-US/Firefox/Releases/34">Firefox 34</a>)</li>
 <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer#Method_definitions">Object initializer: shorthand method names</a> (<a href="/en-US/Firefox/Releases/34">Firefox 34</a>)</li>
</ul>

<h2 id="Features_not_compliant_with_the_ES6_specification">Features not compliant with the ES6 specification</h2>

<p>The following features are (partially) implemented in Firefox, but are not compliant with the specification. There are a couple of possible reasons for this: Firefox's implementation is based on an older draft of the ES6 specification, or Firefox's current implementation is an experimental design added before a similar feature was added to the ES6 specification.</p>

<ul>
 <li><a href="/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators">Legacy iterators and generators</a> (<a href="/en-US/docs/Web/JavaScript/New_in_JavaScript/1.7">JS 1.7</a>, <a href="/en-US/Firefox/Releases/2">Firefox 2</a>)</li>
 <li><a href="/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment">Destructuring assignment</a> (<a href="/en-US/docs/Web/JavaScript/New_in_JavaScript/1.7">JS 1.7</a>, <a href="/en-US/Firefox/Releases/2">Firefox 2</a>) (ES6 compliance {{bug("950547")}})</li>
 <li>{{jsxref("Statements/const", "const")}} (<a href="/en-US/docs/Web/JavaScript/New_in_JavaScript/1.5">JS 1.5</a>, Firefox 1.0) (ES6 compliance {{bug("950547")}})</li>
 <li>{{jsxref("Statements/let", "let")}} (<a href="/en-US/docs/Web/JavaScript/New_in_JavaScript/1.7">JS 1.7</a>, <a href="/en-US/Firefox/Releases/2">Firefox 2</a>) (ES6 compliance {{bug("950547")}})</li>
</ul>

<h2 id="See_also">See also</h2>

<ul>
 <li><a href="/en-US/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_7_support_in_Mozilla">ECMAScript 7 support in Mozilla</a></li>
 <li><a href="https://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts">ECMAScript 6 specification drafts</a></li>
 <li><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=694100">Mozilla ES6 tracking bug</a></li>
 <li><a href="https://kangax.github.io/compat-table/es6/" title="https://kangax.github.io/compat-table/es6/">ECMAScript 6 support across browsers</a></li>
</ul>
Revert to this revision