Первоначально опубликовано на codewithstyle.info
Недавно два предложения TC39 продвинулись до 3 -го этапа.
Разработчики для нас значит, что две новые захватывающие языковые функции скоро станут частью стандарта Ecmascript.
Давайте быстро посмотрим на эти дополнения и посмотрим, как их воспользоваться.
Какова сделка с предложениями TC39?
TC39 является группой людей, которая управляет разработкой ECMASCRICT (стандарт которого является языком JavaScript реализацией). Они регулярно встречаются, чтобы обсудить предложения новых языковых функций. Каждое предложение проходит через несколько этапов. Как только он достигнет этапа 4, он готов быть включен в следующую версию стандарта ECMASCRICE.
Когда предложение достигает стадии 3, оно уже довольно зрелости. Спецификация была утверждена и вряд ли изменится. Возможно, уже есть некоторые браузеры, внедряющие новую функцию. Хотя предложение на этапе 3 не гарантированно станет частью стандарта, это, скорее всего, это будет.
Два предложения, на которые мы смотрим:
Дополнительная цепочка
Дополнительные цепочки направлены на предоставление хорошего и короткого синтаксиса для очень распространенного шаблона: безопасно доступ к вложенному свойству объекта.
const customers = [
{
name: "John",
company: {
name: "Acme",
address: "London"
}
},
{
name: "Jane",
company: {
address: "New York"
}
},
{
name: "Judith"
}
];
Этот массив содержит объекты, представляющие клиентов. Все они следуют аналогичной структуре, но некоторые свойства являются необязательными. Допустим, мы хотели бы итерацию по массиву и распечатать название компании в верхнем регистре для каждого клиента.
for (let customer of customers) {
console.log(customer.company.name.toUpperCase());
}
Как вы уже догадались, приведенный выше код не является безопасным. Это приведет к ошибкам времени выполнения для второго и третьего массива. Мы можем исправить его, используя следующий популярный шаблон.
console.log(
customer &&
customer.company &&
customer.company.name &&
customer.company.name.toUpperCase()
);
Логично и Оператор ( && ) в Javascript ведет себя иначе, чем большинство языков программирования. Он работает на любом типе значения, не только логическим. a && b переводится на: если A это фальсификация (можно преобразовать в false ), вернуть A Анкет В противном случае, возвращайте b Анкет
К сожалению, это решение довольно многословное. Есть много повторений, и становится хуже, чем глубже, объекты вложены. Более того, он проверяет значение, чтобы быть фальсификация , не NULL или неопределенное Анкет Следовательно, это вернется 0 Для следующего объекта, хотя может быть предпочтительно возвращать неопределенное вместо.
{
name: "John",
company: {
name: 0,
}
}
Дополнительная цепочка приходит на помощь! С помощью этой новой функции мы можем сократить вышеупомянутую часть до одной линии.
customer?.company?.name?.toUpperCase();
Клиент? .company Выражение проверит, является ли Клиент это нулевой или неопределенное Анкет Если это так, это будет оцениваться до неопределенное Анкет В противном случае он вернется Компания Анкет Другими словами, Клиент? .company эквивалентен клиент ? Заказчик: неопределенно Анкет Новый ? Оператор особенно полезен при цепочке, отсюда и название (необязательное Цепля ).
Будьте осторожны при замене существующего && Цепи с ? Оператор! Имейте в виду тонкую разницу в обработке фальшивых значений.
Nullish Coalescing
Второе предложение представляет ?? Оператор, который вы можете использовать для обеспечения значения по умолчанию при доступе к свойству/переменной, которая, как вы ожидаете, может быть нулевой или неопределенное Анкет
Но эй, почему бы просто не использовать для этого? Аналогично && , логично или Может также оператор по не булавым значениям. a b Возвращает A Если это правда, или
Тем не менее, это идет с той же проблемой, что и && – он проверяет на Правда ценность. Например, пустая строка ( '' ) не будет рассматриваться как допустимое значение, и вместо этого будет возвращено значение по умолчанию.
const customer = {
name: "John",
company: {
name: ""
}
};
customer.company.name || "no company"; // === 'no company'
Nullish Coalescing Operator может быть хорошо сочетается с дополнительными цепочками.
(customer?.company?.name ?? "no company").toUpperCase();
Хотя преимущество дополнительной цепочки является ясной (меньше словесного кода), Nullish Coalescing немного более тонкая. Мы все использовали для обеспечения значения по умолчанию в течение длительного времени. Однако этот шаблон потенциально может быть источником неприятных ошибок, когда фальшивое значение пропускается в пользу значения по умолчанию. В большинстве случаев семантика ??
Как я могу его использовать?
Поскольку эти предложения еще не достигли этапа 4, вам нужен транспил код, который их использует (например, с Babel). Вы можете играть с Вавилочка он-лайн Repl Чтобы увидеть, к чему они собираются.
В момент написания, дополнительная цепочка – это Доступно в Chrome за флагом функций Анкет
Дополнительная цепочка также будет доступна в предстоящем TypeScript 3.7 Выпуск !
Резюме
Недавние версии Ecmascript не принесли много синтаксических дополнений к языку. Вероятно, это изменится со следующим изданием. Некоторые люди говорят, что JavaScript раздувается. Я лично считаю, что эти два часа синтаксического сахара давно давно назрели, поскольку они были доступны во многих современных языках программирования, и они рассматривают реальные сценарии общего развития.
Что вы думаете? 😉
Хотите узнать больше?
Вам понравилась эта статья TypeScript? Бьюсь об заклад, тебе тоже понравится моя книга!
⭐ Advanced TypeScript ⭐ ️
Оригинал: “https://dev.to/miloszpp/two-cool-features-coming-soon-to-javascript-515i”