Новые возможности Javascript в 2018 году

1656581285 novye vozmozhnosti javascript v 2018 godu

Флавио Х. Фрейтас

Наши друзья из TC39 выпустили новые обновления для нашей любимой JavaScript.

bocZipyVNaJoZ43Q0DuUVShsFUBtYgbmhOAH

Если вы хотите следить за процессом создания новых релизов комитетом, вы можете перейти по этой ссылке. Процесс утверждения и внесения изменений проходит пять этапов:

  • Этап 0: Strawman — Разрешить введение в спецификацию
  • Этап 1: Предложение – обоснуйте дополнения; Описать форму раствора; Определите потенциальные проблемы
  • Этап 2: Черновик – точно опишите синтаксис и семантику, используя язык формальной спецификации
  • Этап 3: кандидат — укажите, что для дальнейшего усовершенствования потребуется обратная связь от реализаций и пользователей
  • Этап 4: Готово – указывайте, что добавление готово к включению в официальный стандарт ECMAScript

Более подробную информацию можно увидеть здесь. Если вы хотите узнать больше о предыдущих изменениях, просмотрите ES6, ES7 и ES8.

Давайте посмотрим, что они добавили или обновили за последний год:

1. Много изменений регулярного выражения

У нас есть четыре модификации регулярного выражения. Давайте посмотрим на них:

s (dotAll) флажок для регулярных выражений

Используя регулярные выражения, ожидается, что точка . соответствует одному символу, но это не всегда верно. Единственное исключение – символы окончания строки:

/hello.bye/.test('hello\nbye') // prints false

Решением является новый флаг /s (с однострочным):

/hello.bye/s.test('hello\nbye')  // prints true

RegExp именуемые группы увлечения

Это старый способ получить год, месяц и день от даты:

const REGEX = /([0-9]{4})-([0-9]{2})-([0-9]{2});const results = REGEX.exec('2018-07-12');console.log(results[1]); // prints 2018console.log(results[2]); // prints 07console.log(results[3]); // prints 12

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

const REGEX = /(?<year>[0-9]{4})-(?<month>[0-9]{2})-(?<day>[0-9]{2});const results = REGEX.exec('2018-07-12');console.log(results.groups.year);  // prints 2018console.log(results.groups.month); // prints 07console.log(results.groups.day);   // prints 12

RegExp Искать по утверждениям

Есть две версии взгляда на утверждение: положительный и отрицательный.

а) Положительный (?)=…)

'$foo #foo @foo'.replace(/(?<=#)foo/g, 'XXX')// prints $foo #XXX @foo

Это (?<=#)foo/g регулярное выражение говорит, что слово должно начинаться с #, и оно не влияет на общую соответствующую строку (поэтому оно не заменяет символ #).

б) Отрицательный (?!…)

'$foo #foo @foo'.replace(/(?<!#)foo/g, 'XXX')// prints $XXX #foo @XXX

Напротив, это утверждение гарантирует, что оно не начинается с #.

Экранирование свойств RegExp Unicode

Теперь мы можем искать символы, упоминая их свойства символов Unicode внутри \p{}

/\p{Script=Greek}/u.test('μ') // prints true

Вы можете проверить больше свойств, нажав здесь.

2. Свойства Rest/Spread

Остальный оператор (...) копирует остальные ключи свойств, не упомянутых. Давайте рассмотрим пример:

const values = {a: 1, b: 2, c: 3, d: 4};const {a, ...n} = values;console.log(a);   // prints 1console.log(n);   // prints {b: 2, c: 3, d: 4}

3. Promise.prototype finally

Этот новый обратный вызов всегда будет выполняться независимо от того, был вызван catch или нет.

fetch(' => data.json()).catch(err => console.error(err)).finally(() => console.log('processed!'))

4. Асинхронная итерация

Наконец-то!

Теперь мы можем использовать await на наших объявлениях циклов.

for await (const line of readLines(filePath)) {  console.log(line);}

И все это изменения с этого года. Подождем, что они нам принесут в следующем году.

Если вам понравилась эта статья, не забудьте поставить лайк, дайте мне много аплодисментов – значит весь мир для писателя? Подпишитесь на меня, если вы хотите читать больше статей о культуре, технологиях и стартапах.

Флавио Х. де Фрейтас является предпринимателем, инженером, любителем технологий, мечтателем и путешественником. Работал как технический директор в Бразилия, Силиконовая долина и Европа.

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

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