JavaScript Features in ES2020
undefined

Good news – the new ES2020 features are now finalized! This means we now have a complete idea of the changes happening in ES2020, the new and improved specification of JavaScript. So let’s see what those changes are.

  • BigInt: BigInt, one of the most anticipated features in JavaScript, is finally here. It actually allows developers to have much greater integer representation in their JS code for data processing for data handling. At the moment the maximum number you can store as an integer in JavaScript is . But BigInt actually allows you to go even beyond that. However, you need to have an n appended at the very end of the number, as you can see above. This n denotes that this is a BigInt and should be treated differently by the JavaScript engine (by the v8 engine or whatever engine it is using). This improvement is not backwards compatible because the traditional number system is IEEE754 (which just cannot support numbers of this size).
  • Dynamic import: Dynamic imports in JavaScript give you the option to import JS files dynamically as modules in your application natively. This is just like how you do it with Webpack and Babel at the moment. This feature will help you ship on-demand-request code, better known as code splitting, without the overhead of webpack or other module bundlers. You can also conditionally load code in an if-else block if you like. The good thing is that you actually import a module, and so it never pollutes the global namespace.
  • Nullish Coalescing: Nullish coalescing adds the ability to truly check nullish values instead of falsey values. What is the difference between nullish and falsey values, you might ask?

In JavaScript, a lot of values are falsey, like empty strings, the number 0, undefinednullfalseNaN, and so on.

However, a lot of times you might want to check if a variable is nullish – that is if it is either undefined or null, like when it’s okay for a variable to have an empty string, or even a false value.

In that case, you’ll use the new nullish coalescing operator ??

  • Optional Chaining: ptional chaining syntax allows you to access deeply nested object properties without worrying if the property exists or not. If it exists, great! If not, undefined will be returned. This not only works on object properties, but also on function calls and arrays. Super convenient! Here’s an example:
  • Promise.allSettled:  method accepts an array of Promises and only resolves when all of them are settled – either resolved or rejected. This was not available natively before, even though some close implementations like race and all were available. This brings “Just run all promises – I don’t care about the results” natively to JavaScript.
  • String#matchAll: matchAll is a new method added to the String prototype which is related to Regular Expressions. This returns an iterator which returns all matched groups one after another. Let’s have a look at a quick example:
  • globalThis: If you wrote some cross-platform JS code which could run on Node, in the browser environment, and also inside web-workers, you’d have a hard time getting hold of the global object. This is because it is window for browsers, global for Node, and self for web workers. If there are more runtimes, the global object will be different for them as well. So you would have had to have your own implementation of detecting runtime and then using the correct global – that is, until now. ES2020 brings us globalThis which always refers to the global object, no matter where you are executing your code:
  • Module Namespace Exports: In JavaScript modules, it was already possible to use the following syntax:

However, no symmetric export syntax existed, until now:

This is equivalent to the following:

  • Well defined for-in order: The ECMA specification did not specify in which order should run. Even though browsers implemented a consistent order on their own before now, this has been officially standardized in ES2020. – courtesy