Releases: tc39/ecma262
Releases · tc39/ecma262
ES2021
This was approved on June 22, 2021 by the Ecma GA.
ES2021 Candidate March 2021
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.
ES2020 Candidate June 2020
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.
Changes since https://github.com/tc39/ecma262/releases/tag/es2020-candidate-2020-04:
ES2020
This was approved on June 16, 2020 by the Ecma GA.
ES2020 Candidate April 2020
Note: this is still only a candidate, until the Ecma GA approves it in June. TC39 approved it on 2020.04.02.
ES2019
ES2018
ES2017
ES2017 Draft 2016-07-25
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
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
- Added InvalidBracedQuantifier to reject
Other notable changes
- The draft now auto-deploys when new commits are pushed.
- Another few truckloads of editorial fixes and improvements.