ECMAScript 2020, the lates version of the official specification underlying JavaScript, was formally approval by ECMA International, and the ECMA technical committee overseeing the specification, on June 16.
ECMAScript 2020 introduces multiple features ranging from a new import()
facility for loading modules to a new BigInt
type for working with arbitrary precision integers.
Specific features introduced by ECMAScript 2020 include:
- A “function-like”
import()
module loading syntax to asynchronously import modules with a dynamic specifier. The proposal adds animport(specifier)
syntactic form, acting in many ways like a function. It returns a promise for the module namespace object of the requested module, created after fetching, instantiating, and evaluating a module’s dependencies, along with the module itself. Thespecifier
will be interpreted the same way as in animport
declaration. Whilespecifier
is a string, it is not necessarily a string literal; thus, code likeimport(`./language-packs/${navigator.language}.js`)
will work. This was not possible with the usualimport
declarations. With the plan,import()
is proposed to work in both modules and scripts, giving script code an easy asynchronous entry point into the module world and allowing it to start running module code. BigInt,
a new number primitive for working with arbitrary precision integers.BigInt
can represent numbers larger than two to the 53rd power, the largest number JavaScript can represent reliably with theNumber
primitive. ABigInt
is created by appendingn
to the end of the integer or by calling the constructor.- The
matchAll
method for strings, to produce an iterator for all matched objects generated by a global regular expression. The rationale behind this proposal is that if a developer has a string and either a sticky or a global regular expression with multiple capturing groups, the developer might want to iterate through all the matches, for which there are currently several options but with limitations.String#matchAll
addresses issues by providing access to all capturing groups and not visibly mutating the regular expression object in question. Promise.allSettled
, a new Promise combinator that does not short-circuit. This returns a promise that is fulfilled with an array of promise state snapshots, but only after the original promises have settled, i.e. have been either fulfilled or rejected.globalThis
, providing a universal way to access the globalthis
value.- A dedicated
export * as ns from ‘module’
syntax to use within modules. - Increased standardization of
for-in
enumeration order, partially specifying enumeration order in JavaScript. import.meta,
a host-populated object in Modules that can contain contextual information. This serves as a JavaScript metaproperty, holding host-specific metadata about the current module.- Nullish coalescing, a value selection operator for better handling of cases involving property accesses. It is a syntax feature to improve working with “nullish” values (
null
or undefined). - Optional chaining, a property access and function invocation operator that will short-circuit if the value to access/invoke is nullish.
The last update to ECMAScript, ECMAScript 2019, featured capabilities such as prototype.flatMap
for nested arrays.