Что нового в стандарте ES2021 для JavaScript? — CloudSavvy ИТ

Иллюстрация с логотипом JavaScript

Годовой выпуск ECMAScript здесь, предлагая новые функции и улучшения синтаксиса. Спецификация была доработана организацией по стандартизации ECMA International 22 июня 2021 года, что означает, что теперь она готова к использованию.

Самая популярная реализация ECMAScript — это JavaScript, язык, поддерживаемый веб-браузерами и облачными средами через среды выполнения, такие как Node.js. Вот краткое изложение основных изменений в ES2021.

Promise.any ()

Promise.any () завершает поддержку совокупной обработки ошибок для обещаний. Он замкнется и вернется, как только один переданных объектов Promise выполняется.

Если все обещания терпят неудачу, метод отклоняет новую ошибку AggregateError. Этот объект инкапсулирует причины отклонения для каждой отдельной ошибки.

const promises = [doSomething(), doSomethingElse()]; try {// Это будет возвращаемое значение из `doSomething ()` // или `doSomethingElse ()`, в зависимости от того, какая // разрешает первую const firstToResolve = await Promise.any (promises); } catch (errors) {for (const error of errors) {// Итерация отдельных причин отклонения обещаний}}

Promise.any () полезен в сценариях, где вам нужно принять меры, если хотя бы одно обещание разрешено, но не имеет значения, если некоторые из них не сработают. Он дополняет существующие Promise.all () а также Promise.allSettled () методы.

Вот краткое описание различий:

  • any () — разрешается, если разрешается какое-либо обещание. Отклоняет, если все обещания отклоняются.
  • all () — разрешается, если разрешаются все обещания. Отклоняет, если какое-либо обещание отклоняется.
  • allSettled () — разрешается после того, как все обещания были выполнены или отклонены. Этот метод не отвергает.

Операторы логического присваивания

ES2021 поставляется с некоторыми долгожданными улучшениями операторов. Новые операторы логического присваивания обеспечивают удобное замыкание, что приводит к написанию меньшего количества кода.

Три оператора (&& =, || = и ?? =) объединяют соответствующее логическое сравнение с присвоением значения. Вам больше не нужно писать имя переменной дважды, если вы назначаете только при совпадении сравнения:

// ES2020 x && (x = y) x || (х = у) х = х ?? y // ES2021 x && = y; х || = у; х ?? = у;

Это помогает завершить поддержку оператора и снижает повторяемость кода с тяжелым назначением. Это дает логическим операторам такую ​​же интеграцию присваивания, как и математические операторы (+ =, — =, * =).

String.prototype.replaceAll ()

Новый метод в прототипе String значительно упрощает замену всех экземпляров подстроки, не прибегая к регулярному выражению. Когда существующему методу replace () передается строка в качестве входных данных, он заменяет только первый экземпляр этого значения. replaceAll () добавляет поведение, которого хотели и ожидали многие разработчики.

const str = «xxxyz»; // xxyz console.log (str.replace («x», «»)); // yz console.log (/ x / g, «»); // yz console.log (str.replaceAll («x», «»));

Это небольшая функция, которая должна иметь немедленную практическую пользу. Вызов replaceAll () увеличивает читаемость кода по сравнению с регулярным выражением с модификатором ag (global). Это особенно верно, когда вы работаете с менее опытными разработчиками, которые могут не понимать, почему использовалось регулярное выражение.

Числовые разделители

Простое изменение добавляет числовые разделители к основному синтаксису JavaScript. Это позволяет размещать символы подчеркивания между цифрами в буквальных числах, делая их более удобочитаемыми. Они будут автоматически удалены при анализе ваших файлов.

// ES2020 — Это сложно увидеть с первого взгляда! const миллиард = 1000000000; // ES2021 — это может быть более читаемым const миллиард = 1_000_000_000;

Разделители имитируют использование запятых между группами записанных чисел. Их использование совершенно необязательно. Синтаксис также работает для двоичных и шестнадцатеричных литералов с префиксом 0b и 0x.

Расширенные возможности

ES2021 включает в себя несколько новых объектов, предназначенных для более сложных случаев использования. Во-первых, есть WeakRef, механизм, который содержит ссылку на объект, но оставляет его доступным для сборки мусора. Ссылка «слабая», потому что нет гарантии, что ее можно будет использовать в будущем.

Вы сможете получить доступ к объекту, пока он не будет собран. Это может быть вообще не сборщик мусора, так как браузер решает, когда удалять объекты, на которые нет ссылок.

Вы создаете слабые ссылки с помощью конструктора WeakRef, передавая объект, который хотите использовать. Вы можете получить доступ к исходному объекту позже, вызвав deref ().

const x = {}; const xWeakRef = новый WeakRef (x); const deRef = xWeakRef.deref (); // это объект из `x`

Слабые ссылки следует использовать для кеширования больших объектов, которые не являются важными для вашего приложения. Браузер сможет очистить их при нехватке памяти, улучшив общую производительность.

Наряду со слабыми ссылками новый конструктор FinalizationRegistry предоставляет уведомления, когда объекты собираются сборщиком мусора. Отменить сборку мусора невозможно; эта функция предназначена для того, чтобы вы могли реагировать на очистку, освобождая любые другие связанные ресурсы. Например, если объект, представляющий пользователя, был собран сборщиком мусора, вы можете использовать обратный вызов для удаления кэшированного большого двоичного объекта изображения его профиля.

const registry = new FinalizationRegistry (key => {// Этот обратный вызов будет запущен, когда // зарегистрированный объект будет удален сборщиком мусора if (key === «user») {// Удалите здесь кэшированные данные пользователя.}}); const user = {Имя пользователя: «CloudSavvy»}; registry.register (пользователь, «пользователь»);

В этом примере ваш обратный вызов будет запущен и получит пользователя в качестве параметра, когда объект x будет собран сборщиком мусора. Вы можете использовать ключ для идентификации и удаления похожих данных. Вам нужно будет создать этот механизм самостоятельно.

Заключение

ES2021 — это здоровое обновление спецификации, которое предлагает новые удобные функции сообществу ECMAScript. Promise.any () завершает цепочку обработки обещаний, в то время как операторы логического присваивания и replaceAll () упрощают повседневное использование.

Хотя функции ES2021 только что доработаны, они доступны в браузерах круглый год. Chromium, Firefox и Safari уже предлагают полная поддержка ES2021, поэтому вы можете писать код, используя новые возможности уже сегодня. Такие функции, как Promise.any () и String.prototype.replaceAll (), могут быть легко полифилированы для старых браузеров; другие, такие как операторы логического присваивания, могут обрабатываться препроцессорами, такими как Вавилон.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *