Хорошие новости — новые функции 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-адрес содержащего документа (для встроенных скриптов).