Предстоящие возможности ECMAScript, которые меня радуют

Поезд спецификаций 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.

Оцените статью
devanswers.ru
Добавить комментарий