ESNext: Предложения на ближайшее время

Во-первых, что такое ESNext?

Обычно «следующая» версия ECMAScript (JavaScript) относится к постоянно движущейся цели, выходящей за пределы спецификации текущего моментального снимка.

Три функции, о которых я собираюсь рассказать в этой статье, находятся на этапах 3 и 4 процесса TC39.

В предыдущих сообщениях я писал о новых функциях, которые уже были включены или скоро будут интегрированы в новые спецификации (ES2019-ES2020):

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

Показатель:

  • import.meta. (этап 4)
  • Promise.prototype.inally. (этап 4)
  • Логическое присвоение || ==, && =, ?? =. (этап 3)

import.meta

Автор: Доменик Деникола

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

Среда хоста возвращает набор свойств (в виде пар ключ / значение), которые будут добавлены к объекту.

В браузере мы можем использовать это свойство, например, следующим образом:

<script type="module" src="one_module.mjs"></script>

Теперь вы можете получить доступ к метаинформации о модуле с помощью объекта import.meta, который в этом случае возвращает объект, указывающий базовый URL-адрес модуля:

console.log(import.meta);
//{url:"file:///home/one-module.mjs"}

Мета-свойство import.meta синтаксически допустимо в модулях, поскольку оно предназначено для метаинформации о текущем запущенном модуле.

Promise.prototype.finally

Автор: Джордан Харбанд.

Многие библиотеки обещаний имеют метод «finally» для регистрации обратного вызова, который будет вызываться, когда обещание выполнено или отклонено. Например, вариант использования может заключаться в том, чтобы записать, что операция завершена, независимо от того, была она успешной или нет.

Метод «finally» не получит никаких аргументов, поскольку нет надежных средств определения того, было ли обещание выполнено или отклонено. В этом случае вам нужно только всегда выполнять задачу.

В этом примере, когда мы выполняем операцию Fetch, мы хотим отобразить счетчик загрузки на нашей странице, но когда запрос Fetch заканчивается либо «выполнен», либо «отклонен», мы хотим удалить его:

let loading = true;fetch(myRequest)
.then( (response) => response.json))
.then( json => { 
   //Do some stuff
 }.catch( (error) =>{ console.error(error) }; 
.finally(() => { loading = false; });

Логическое присвоение

Авторы: Джастин Риджуэлл и Хемант Х.М.

До сих пор JavaScript не поддерживал логическое присвоение, а теперь с этим предложением мы можем комбинировать логические операторы: «&&», «||» и «??» с выражениями присвоения: «=.»

Помнить:

Оператор« нулевого объединения ?? действует очень похоже на оператор ||, за исключением того, что он не использует истина при вычислении оператора. Вместо этого он использует определение nullish, что означает, что значение строго равно null или undefined ».

Давайте посмотрим на семантику логических операций.

Семантика логического «и»:

a && b;
//b when a is truthy
//a when a is not truthy

"И и." Логика и назначение.

//These two lines are equivalent:
a &&= b;
a && (a = b);

Семантика логического ИЛИ:

a || b;
//a when a is truthy
//b when a is not truthy

"Или или." Логика или назначение

//The two lines are equivalent
a || = b;
a || (a = b);

Семантика нулевого объединяющего присваивания:

a ?? b;
//a when a is not nullish
//b when  a is null or undefined.

Нулевое слияние присваивания:

//The two lines are equivalent
a ??= b;
a ?? (a = b);

На простом английском:

let a = 'Hello world!';

Без логического присвоения: всегда будет "Hello world!" даже если «а» не равно нулю:

a = a ?? 'Hello you!';
//"Hello world!

С логическим назначением: «a» не будет переназначен как «Hello you», потому что a не равно нулю, а «a» останется прежним.

a ??= 'Hello you!';
//Hello world!

В этом случае «а» будет «Здравствуйте!»

let a;
a ??= 'Hello you!';
//Hello you!

Логические присваивания следуют за коротким замыканием соответствующих операций. Они только выполняют присваивание, если логическая операция оценивает правую часть.

Заключение

Первые два предложения находятся на этапе 4, и мы скоро увидим их в спецификации (ES2020?), А последнее предложение находится на этапе 3, и я ожидаю, что оно будет включено в ES2021.

Большое спасибо за то, что прочитали этот пост! Я надеюсь, что вы сочли полезным.

использованная литература

Сайт Т39.

Примечание команды разработчиков Plain English

Вы знали, что у нас четыре публикации? Проявите немного любви, предложив им следующее: JavaScript на простом английском, AI на простом английском, UX на простом английском , Python на простом английском - спасибо и продолжайте учиться!

Кроме того, мы всегда заинтересованы в продвижении хорошего контента. Если у вас есть статья, которую вы хотели бы отправить в какую-либо из наших публикаций, отправьте электронное письмо по адресу [email protected] с вашим именем пользователя Medium и тем, о чем вы хотите написать, и мы вернуться к вам!