Поезд спецификаций ECMAScript ничуть не замедлился. Есть еще масса замечательных предложений, которые ждут своего часа.
Вот несколько из предстоящих функций ECMAScript, которые меня особенно радуют.
Temporal
- Документы, поваренная книга, полифилл
API даты/времени всегда был слабым местом JavaScript. Такие замечательные библиотеки, как moment.js (уже устаревшая), появились, чтобы исправить это, и они отлично справились.
Но теперь, наконец, мы подошли к моменту, когда мы можем обобщить наши знания и опыт и ввести современный, надежный API даты/времени в стандартную библиотеку JavaScript.
Temporal
— это новый глобальный объект, который действует как модуль, наполненный полезными функциями (как Math
). API основан на неизменяемых объектах, и в нем реализована отличная поддержка часовых поясов и негригорианских календарей.
Вот несколько примеров.
// parsing a string
const d = Temporal.Instant.from('1969-07-20T20:17Z')
// just plain date
Temporal.PlainDate.from({ year: 2000, month: 8, day: 2 });
// => 2000-08-02
// difference between two points
// in time in different time zones
const { from } = Temporal.ZonedDateTime
from('2020-03-08T11:55:00+08:00[Asia/Hong_Kong]')
.until(from('2020-03-08T09:50:00-07:00[America/Los_Angeles]'))
//=> PT12H55M
Я рекомендую пролистать поваренную книгу, чтобы по-настоящему осознать потенциал этого замечательного API.
Группировка массивов
- Предложение, полифилл
Это небольшое предложение добавляет два метода group
и groupToMap
в прототип массива.
Оба метода используются для группировки элементов в массиве по определенным критериям (ближайший родственник — groupBy в lodash).
const users = [
{ name: "Jane" },
{ name: "John" },
{ name: "Tom" }
]
users.group(u => u.name.toLowerCase().charAt(0))
// {
// "j": [{name: "Jane"}, {name: "John"],
// "t": [{ name: "Tom" }]
// }
groupToMap
работает аналогично, но дает нам Map. Она может пригодиться, когда нам понадобятся нестроковые ключи.
Есть и другие причины предпочесть карты.
Изменение массива на копию (этап 3)
- Предложение, Polyfill
Что не так с такими методами Array, как reverse
, sort
или splice
? Да ничего, они все замечательные. Единственная проблема в том, что они модифицируют массив на месте, что затрудняет их использование в FP-коде.
Это предложение вводит 4 новых неизменяющих метода для массивов (а также для типизированных массивов), которые работают аналогично, но не изменяют исходный массив: toReversed()
, toSorted()
, toSpliced()
, и with()
.
Последний используется для замены одного элемента в массиве:
['j', 'a', 'n', 'e'].with(2, 'd')
//=> ['j', 'a', 'd', 'e']
Записи и кортежи
- Предложение, Playground
Записи и кортежи — это новые примитивные структуры данных, похожие на объекты и массивы, но глубоко неизменяемые.
const record = #{ name: "John", surname: "Smith" }
const tuple = #[1, 2, 3]
Синтаксис подчеркивает сходство между ними и объектами/массивами. Все, что вам нужно сделать, это добавить к ним префикс #
.
Записи и кортежи могут содержать только другие примитивные значения (включая другие записи/кортежи).
Это ограничение позволяет им быть глубоко неизменяемыми.
Это позволяет заставить сравнение равенства ===
работать для них так же, как и для других примитивов. Если две записи/кортежа структурно глубоко равны, то ===
вернет true
— и это очень важно.
Внедрение таких структур данных — отличный способ улучшить функциональные возможности JavaScript (поскольку неизменяемость имеет решающее значение в функциональной парадигме).
Но это довольно большая тема, и я вернусь к ней в отдельной статье.
Куда двигаться дальше
Это были замечательные предложения по JavaScript, которых я жду с нетерпением. Надеюсь, они понравятся и вам.
Больше предложений можно найти на официальной странице GitHub.