JavaScript: Что нового в ECMAScript 2018 (ES2018)?
Перевод статьи JavaScript: What’s new in ECMAScript 2018 (ES2018)?
На последнем собрании TC39 были отобраны нововведения, которые войдут в « ECMAScript® 2018 Language Specification» (ES2018). Были включены все предложения, достигнувшие четвертой стадии с момента утверждения ES2017 . Эта статья — быстрый взгляд на новые возможности ES2018.
Стадия-4?
Комитет TC39 рукводствуется процессом в пять стадий, начиная со Стадии-0 до Стадии-4, в каждой из которых он разрабатывает новую особенность языка. Стадия-4 — это “Финальная” фаза. Список предложений Стадии-4 доступен на GitHub.
Rest/Spread
При деструктуризации свойства Rest / Spread позволяют объединить оставшиеся свойства объекта в новый объект. Можете думать об этом как о волшебном магните, привлекающем все оставшееся.
Я сам часто использую это, особенно в React (Native), где забираю определенные данные из this.props
для внутреннего использования, а затем перенаправляю все оставшиеся props возвращаемому дочернему компоненту.
Кроме того, если вы немного измените ход ваших мыслей, свойства Rest / Spread предоставят вам хороший способ удалить свойство из объекта немутабельным способом.
Асинхронная итерация
С асинхронной итерацией мы получаем асинхронные итераторы и асинхронные iterables. Асинхронные итераторы, как и обычные итераторы, за исключением метода next()
, возвращают промис для пары {value, done}
. Чтобы использовать асинхронные iterables, теперь мы можем использовать ключевое слово await
для циклов for … of
.
Promise.prototype.finally()
Promise.prototype.finally()
завершает выполнение всех промисов, позволяя вам создать колбэк, который отработает после изменения состояния промиса ( fulfilled или rejected).
Типичным примером использования является скрытие spinner после запроса fetch()
: вместо дублирования логики внутри последних .then()
и .catch()
теперь можно поместить его внутрь .finally()
Особенности RegExp
Всего 4 предложения, связанные с RegExp, вошли в ES2018:
- s (dotAll) flag for regular expressions
- RegExp named capture groups
- RegExp Lookbehind Assertions
- RegExp Unicode Property Escapes
Особенно хочу остановиться на втором пункте, т.к. он повышает удобство чтения:
Более подробную информацию об этих особенностях можно найти у Mathias Bynens — одной из движущих сил этих нововведений — в его блоге: регулярные выражения ECMAScript становятся все лучше!
Что сейчас?
Обратите внимание, не все нововведения доступны во всех браузерах. Стадия-4 означает, что они завершены и разработчики браузеров должны их реализовать (некоторые уже реализованы, другие в процессе реализации).
Я уже с нетерпением жду, что же еще появится в JavaScript. Например, Optional Chaining Operator уже мне очень нравится🙂