2026
2 featuresThe await keyword, when used at the top level of a module (outside of an async function), delays parent module execution until after a promise fulfills.
The Math.sumPrecise() static method returns the sum of an iterable of numbers. It avoids the precision loss of intermediate partial sums, as found using reduce() or a loop to add together an array of values.
2025
2 featuresThe Atomics.waitAsync() static method waits for a value in a shared memory location, providing a promise when the expected value is not yet in memory. The waitAsync() method is a non-blocking alternative to Atomics.wait().
The Atomics.pause() static method gives a hint to the CPU that the code calling the method is in a short-duration wait for shared memory, known as spinning or a spinlock.
2024
2 featuresThe resize() method of an ArrayBuffer and the grow() method of a SharedArrayBuffer, constructed with the maxByteLength option, changes the size of the buffer in place.
The transfer() and transferToFixedLength() methods of ArrayBuffer move a buffer from one context to another (for example, to a worker).
2022
1 featuresThe Object.hasOwn() static method checks whether an object has a given property. It's a more robust alternative to the Object.prototype.hasOwnProperty() method.
2021
4 featuresThe cause property of errors records the specific original cause of the error, particularly for errors that have been re-thrown.
The BigInt64Array and BigUint64Array typed arrays represent 64-bit integers, signed and unsigned respectively.
The WeakRef and FinalizationRegistry objects hold references to garbage-collectable objects without creating strong references that prevent their garbage collection.
2020
11 featuresThe logical AND assignment (&&=) and the logical OR assignment (||=) operators short-circuit the respective binary logical operators.
The nullish coalescing (??) and nullish coalescing assignment (??=) operators return (or assign) its right-hand side operand when its left-hand side operand is null or undefined, and otherwise returns its left-hand side operand.
The BigInt JavaScript type represents integers of any size, including integers too large for the primitive Number type.
To improve readability for numeric literals, underscores (_) can be used as separators. For example, 1_050.95 is equivalent to 1050.95.
The #! comment at the absolute start of a script or module is treated as a normal comment and is ignored by the JavaScript engine.
The globalThis property accesses the global this value (and hence the global object itself) across environments.
Omit the binding parameter of a catch clause when you don't need information about the exception in a try ... catch statement.
Template literals are literals delimited with backtick (`) characters, allowing for multi-line strings, string interpolation with embedded expressions, and special constructs called tagged templates.
The destructuring assignment syntax is a JavaScript expression that unpacks values from arrays, or properties from objects, into distinct variables.
The spread (...) syntax allows an iterable, such as an array or string, to be expanded in places where zero or more arguments (for function calls) or elements (for array literals) are expected.
Async generator functions (async function*) create iterators that return multiple promises, one after another, on-demand.
2017
2 featuresThe async and await keywords allow you to use the asynchronous, promise-based behavior of a function without using promise chains.
The exponentiation (**) operator returns the result of raising the first operand to the power of the second operand.
2016
4 featuresThe let and const declarations define block-scoped variables.
Generator functions (function*) create iterators that return multiple values, one after another, on-demand.
The Proxy and Reflect JavaScript built-ins intercept and define custom behavior for fundamental language operations (such as property lookup, assignment, enumeration, or function invocation).
Classes are an object-oriented syntax for JavaScript prototypes.
2015
2 featuresUnicode point escapes (\\u{}) represent Unicode characters within strings.
Objects in JavaScript are collections of key-value pairs.