Exploring New JavaScript Features in ES2021

In the ever-evolving world of JavaScript, the release of ES2021 brings forth a host of exciting new features that developers can explore. From the introduction of the `String.prototype.replaceAll()` method for effortless string replacements to the powerful `Promise.any()` method for handling multiple promises, ES2021 opens up a world of possibilities for JavaScript enthusiasts. Join us as we dive into these new features and discover how they can enhance your coding experience.

Exploring New JavaScript Features in ES2021

Exploring New JavaScript Features in ES2021

JavaScript, the programming language of the web, has evolved significantly over the years. With each new version, the language introduces exciting features that enhance developer productivity and enable the creation of more efficient and maintainable code. In this blog post, we will dive into the latest JavaScript features introduced in ES2021, also known as ES12, and explore how they can benefit developers.


JavaScript has always had a limitation when it comes to handling large numbers. The Number type in JavaScript is a 64-bit floating-point value, which means it cannot accurately represent integers larger than 2^53. However, with the introduction of BigInt in ES2021, developers can now work with arbitrarily large integers.

To create a BigInt, you can append the n suffix to an integer literal or use the BigInt() function. Here's an example:

const largeNumber = 1234567890123456789012345678901234567890n;
console.log(largeNumber); // Output: 1234567890123456789012345678901234567890n

BigInt values can be used in mathematical operations, just like regular numbers. However, keep in mind that you cannot mix BigInt with regular numbers in arithmetic operations. You will need to explicitly convert them using the BigInt() function.

Logical Assignment Operators

ES2021 introduces three new logical assignment operators: &&=, ||=, and ??=. These operators combine logical operators with assignment operators, providing a concise way to update variables based on certain conditions.

The &&= operator assigns the value on the right-hand side to the variable on the left-hand side only if the variable is truthy. Similarly, the ||= operator assigns the value on the right-hand side if the variable is falsy. The ??= operator assigns the value on the right-hand side if the variable is null or undefined.

Here's an example that demonstrates the usage of these operators:

let x = 5;
x &&= 10;
console.log(x); // Output: 10

let y = 0;
y ||= 20;
console.log(y); // Output: 20

let z = null;
z ??= 30;
console.log(z); // Output: 30

These logical assignment operators can help simplify code by reducing the need for additional conditional statements.


The replaceAll() method is a handy addition to the String prototype in ES2021. As the name suggests, it replaces all occurrences of a specified substring with a new substring. Previously, developers had to use regular expressions or a combination of split() and join() to achieve the same result.

Here's an example that demonstrates the usage of replaceAll():

const sentence = "JavaScript is a powerful language. JavaScript is widely used.";
const newSentence = sentence.replaceAll("JavaScript", "JS");
// Output: "JS is a powerful language. JS is widely used."

The replaceAll() method provides a more straightforward and readable way to replace all occurrences in a string.


The Promise.any() method is a new addition to the Promise object in ES2021. It takes an iterable of promises and returns a new promise that is fulfilled with the value of the first fulfilled promise from the iterable. If all promises are rejected, it throws an AggregateError containing an array of rejection reasons.

Here's an example that demonstrates the usage of Promise.any():

const promises = [

  .then((value) => console.log(value))
  .catch((error) => console.log(error));

In this example, Promise.any() returns a promise that resolves with the value of the first successful fetch request. If all fetch requests fail, it catches the AggregateError and logs the rejection reasons.

Logical OR Operator for Nullish Values

ES2021 introduces a new behavior for the logical OR operator (||) when used with nullish values (null and undefined). Previously, the logical OR operator would return the first truthy value. However, with the new behavior, it returns the first non-nullish value.

Here's an example that demonstrates the new behavior:

const value1 = null;
const value2 = "Hello";
const result = value1 || value2;
console.log(result); // Output: "Hello"

In this example, the logical OR operator returns the non-nullish value (value2) instead of null.


ES2021 brings several exciting features to JavaScript that enhance the language's capabilities and improve developer productivity. The addition of BigInt enables the handling of arbitrarily large integers, while the logical assignment operators provide a concise way to update variables based on certain conditions. The replaceAll() method simplifies string substitution, and Promise.any() allows for handling multiple promises more efficiently. Lastly, the new behavior of the logical OR operator with nullish values provides a more intuitive approach to handle default values.

As a JavaScript developer, it is essential to stay up to date with the latest language features to write more efficient and maintainable code. ES2021 is another step forward in the evolution of JavaScript, and these new features open up exciting possibilities for developers. So go ahead, explore these features, and leverage them in your next JavaScript project!

Create a website that grows with you

Get Started