Skip to content

Releases: tc39/ecma262

ES2021

01 Jul 17:34
es2021
fc85c50
Compare
Choose a tag to compare

This was approved on June 22, 2021 by the Ecma GA.

ES2021 Candidate March 2021

09 Mar 03:10
es2021-candidate-2021-03
fc85c50
Compare
Choose a tag to compare
Pre-release

Note: this is still only a candidate, until the Ecma GA approves it in June. TC39 will be asked to approve it on 2021.03.09.

https://tc39.es/ecma262/2021/

ES2020 Candidate June 2020

29 May 06:38
dfd5ea2
Compare
Choose a tag to compare

Note: this is still only a candidate, until the Ecma GA approves it in June. TC39 will be asked to approve it on 2020.06.01.

https://tc39.es/ecma262/2020/

Changes since https://github.com/tc39/ecma262/releases/tag/es2020-candidate-2020-04:

  • Editorial: Fix casing of @@hasInstance well-known symbol (#1978)
  • Normative: Fixed bug in NumberBitwiseOp (#1956)
  • Normative: Fixed bug in Number::unsignedRightShift (#1955)
  • Editorial: Fixed typos in variable name oldvalue (#1954)

ES2020

17 Jun 19:23
dfd5ea2
Compare
Choose a tag to compare

ES2020 Candidate April 2020

02 Apr 18:10
28759f2
Compare
Choose a tag to compare

Note: this is still only a candidate, until the Ecma GA approves it in June. TC39 approved it on 2020.04.02.

https://tc39.es/ecma262/2020/

ES2019

02 Apr 03:17
bc6fd16
Compare
Choose a tag to compare

ES2018

02 Apr 03:14
Compare
Choose a tag to compare

ES2017

02 Apr 03:14
Compare
Choose a tag to compare

ES2017 Draft 2016-07-25

25 Jul 21:35
Compare
Choose a tag to compare
Pre-release

New Features

  • String.prototype.padStart/padEnd
  • Object.values/Object.entries

Normative Changes

  • Unified handling of RegExp \w, \W, \b and \B. Notably, certain characters will no longer drop from \w when using the /ui flags (#525)
  • A proxy's OwnPropertyKeys no longer mistakenly throws an error when returning duplicate keys and the target object was non-extensible (#594)
  • Multiple function declarations in a block with the same name are now explicitly allowed by Annex B (#453)
  • TypedArray, ArrayBuffer, and DataView now have unified, consistent handling of index and offset parameters (#410)
  • When updating a descriptor and it is applicable, we will apply it always (rather than only when the values aren't SameValue). This fixes a case with NaN observability (#353)
  • Clarify that escape produces uppercase characters (#559)
  • Class extends null's default constructor now no longer attempts to call super (#543)
  • When creating a TypedArray from an existing TypedArray with a restricted view, only copy the necessary data rather than the entire buffer (#458)
  • TypedArray.from now allows lengths > 2^32-1 (#428)
  • An indirect export of a non-existent binding will now always fail (previously, a subsequent star-export might accidentally provide that name and be used instead). (#485)
  • global and sticky flags are read from [[OriginalFlags]] in RegExpBuiltinExec (instead of consulting the getters) (#494)
  • Allow various properties on RegExp.prototype to return undefined rather than throwing for web compat reasons (#262)
  • Clarify that Annex B extensions apply to Global code only when it is non-strict code (#460)
  • Added specification text for __defineGetter__, __defineSetter__, __lookupGetter__, and __lookupSetter for web compatibility reasons (#381)
  • Fixed missing [?Yield] parameter on PropertyName of AssignmentProperty (an ES6 oversight) (#388, #442)

Other Notable Changes

  • Hundreds of editorial fixes and changes.
  • Example productions (eg. in notational conventions section) no longer define the production making links work more reliably.
  • Modified Annex B productions now link to the modified definition rather than the global definition.
  • Many new cross-references added (notably, Assert)

ES2016 Draft 2016-02-15

15 Feb 21:02
Compare
Choose a tag to compare
Pre-release

Schedule Updates

ES2016 will be snapped and begin its journey toward an official ECMAScript standard on March 1st.

Normative Changes

  • Added the exponentiation operator.
  • Object.prototype is an immutable prototype exotic object. Its prototype cannot be changed in order to work around a security issue in the browser. See #308, #272.
  • The [[Enumerate]] MOP operation, Proxy's enumerate trap and Reflect.enumerate have been removed due to difficulties both in implementation and specification. See #367.
  • Unicode 8.0 is now required for ES2016. This implies slight changes at least to white space rules and case mappings. The committee intends to update this requirement regularly as Unicode releases yearly. See #300.
  • Proxy [[SetPrototypeOf]] trap now follows the precedent of other traps by not checking invariants of the target object when not needed. Specifically, when the proxy trap returns false, the extensibility of the target and the target's [[Prototype]] slot are not checked. See #331.
  • When using Array.from to consume an iterator, a TypeError is now be thrown when the length goes beyond the MAX_SAFE_INTEGER. See #352.
  • Clarified early error rules for proto. Specifically, early error rules do not apply when the ObjectLiteral appears in a context where ObjectAssignmentPattern is required and when initially parsing a CoverParenthesizedExpressionAndArrowParameterList. See #317.
  • Array.prototype.indexOf now normalizes -0 to +0 when -0 is passed as the start index and the search string occurs at index 0. See #316.
  • In SortCompare, string values are now compared using the Abstract Relational Comparison algorithm. See #315.
  • Extensive updates from @anba to Annex B Regular expressions to match Web Reality. See #303. Details:
    • Added InvalidBracedQuantifier to reject /{1}/ (previously allowed through ExtendedTerm -> Atom -> PatternCharacter)
    • Added ExtendedPatternCharacter to allow forms like /{*/, /}*/ /]/
    • ExtendedPatternCharacter also handles /\c%/ by removing the \ restriction (/\c%/ is equivalent to writing /\\c%/)
    • Added support for /[\c_]/ and /[\c1]/ to ClassEscape (the extended forms \c_ and \c<decimal digit> are only valid in Charact - Changed "ClassEscape :: [~U] DecimalEscape" to allow /[\8]/ by adding the restriction "but only if the integer value of DecimalEsc - Character ranges which start or end with a non-single element CharSet are now handled in a more web-conform way.
    • Merged Term and ExtendedTerm to avoid adding redundant semantics for ExtendedTerm
    • Re-ordered some production rules for clarity and to match 21.2.1

Other notable changes

  • The draft now auto-deploys when new commits are pushed.
  • Another few truckloads of editorial fixes and improvements.