Хорошие новости — новые функции ES2020 теперь доработаны! Это означает, что теперь у нас есть полное представление об изменениях, происходящих в ES2020, новой и улучшенной спецификации JavaScript. Итак, давайте посмотрим, что это за изменения.

# 1: Большое целое

BigInt, одна из самых ожидаемых функций в JavaScript, наконец-то здесь. На самом деле это позволяет разработчикам иметь гораздо большее целочисленное представление в своем JS-коде для обработки данных для обработки данных.

На данный момент максимальное число, которое вы можете сохранить как целое число в JavaScript, равно pow(2, 53) - 1. Но BigInt на самом деле позволяет вам пойти еще дальше.

Однако вам нужно добавить n в самом конце номера, как вы можете видеть выше. Этот n означает, что это BigInt и должен обрабатываться движком JavaScript по-разному (движком v8 или любым другим движком, который он использует).

Это улучшение не имеет обратной совместимости, поскольку традиционной системой счисления является IEEE754 (которая просто не поддерживает числа такого размера).

#2: Динамический импорт

Динамический импорт в JavaScript дает вам возможность динамически импортировать файлы JS как модули в вашем приложении. Это похоже на то, как вы делаете это с Webpack и Babel на данный момент.

Эта функция поможет вам отправлять код по запросу, более известный как разделение кода, без накладных расходов, связанных с веб-пакетом или другими сборщиками модулей. Вы также можете условно загрузить код в блок if-else, если хотите.

Хорошо то, что вы фактически импортируете модуль, и поэтому он никогда не загрязняет глобальное пространство имен.

# 3: Нулевое слияние

Нулевое объединение добавляет возможность действительно проверять nullish значений вместо falsey значений. В чем разница между значениями nullish и falsey, спросите вы?

В JavaScript множество значений — это falsey, например, пустые строки, числа 0, undefined, null, false, NaN и так далее.

Однако во многих случаях вам может понадобиться проверить, является ли переменная нулевой, то есть является ли она либо undefined, либо null, например, когда переменная может иметь пустую строку или даже ложное значение.

В этом случае вы будете использовать новый нулевой оператор объединения, ??

Вы можете ясно видеть, что оператор ИЛИ всегда возвращает истинное значение, тогда как нулевой оператор возвращает ненулевое значение.

# 4: Необязательная цепочка

Необязательный синтаксис цепочки позволяет вам получить доступ к глубоко вложенным свойствам объекта, не беспокоясь о том, существует ли свойство или нет. Если он существует, отлично! Если нет, будет возвращено undefined.

Это работает не только со свойствами объекта, но также с вызовами функций и массивами. Супер удобно! Вот пример:

# 5: Обещание.все улажено

Метод Promise.allSettled принимает массив промисов и разрешается только тогда, когда все они урегулированы — разрешены или отклонены.

Раньше это было недоступно изначально, хотя были доступны некоторые близкие реализации, такие как race и all. Это приносит «Просто выполняйте все обещания — меня не волнуют результаты» изначально для JavaScript.

# 6: Строка # matchAll

matchAll — это новый метод, добавленный в прототип String, связанный с регулярными выражениями. Это возвращает итератор, который возвращает все совпавшие группы одну за другой. Давайте посмотрим на быстрый пример:

# 7: глобальныйЭто

Если бы вы написали какой-нибудь кроссплатформенный JS-код, который мог бы работать на Node, в среде браузера, а также внутри веб-воркеров, вам было бы трудно получить доступ к глобальному объекту.

Это потому, что это window для браузеров, global для Node и self для веб-воркеров. Если сред выполнения больше, глобальный объект для них тоже будет другим.

Таким образом, вам пришлось бы иметь свою собственную реализацию обнаружения времени выполнения, а затем использовать правильный глобальный — то есть до сих пор.

ES2020 предоставляет нам globalThis, который всегда относится к глобальному объекту, независимо от того, где вы выполняете свой код:

#8: Экспорт пространства имен модуля

В модулях JavaScript уже можно было использовать следующий синтаксис:

import * as utils from './utils.mjs'

Однако до сих пор не существовало симметричного синтаксиса export:

export * as utils from './utils.mjs'

Это эквивалентно следующему:

import * as utils from './utils.mjs'
export { utils }

# 9: Четко определенный порядок for-in

В спецификации ECMA не указано, в каком порядке должен выполняться for (x in y). Несмотря на то, что до сих пор браузеры самостоятельно реализовывали последовательный порядок, он был официально стандартизирован в ES2020.

# 10: import.meta

Объект import.meta был создан реализацией ECMAScript с прототипом null.

Рассмотрим модуль module.js:

<script type="module" src="module.js"></script>

Вы можете получить доступ к метаинформации о модуле, используя объект import.meta:

console.log(import.meta); // { url: "file:///home/user/module.js" }

Он возвращает объект со свойством url, указывающим базовый URL-адрес модуля. Это будет либо URL-адрес, из которого был получен скрипт (для внешних скриптов), либо базовый URL-адрес содержащего документа (для встроенных скриптов).