ECMAScript 2026 издан: Temporal API, Map.getOrInsert и новые методы массивов меняют JavaScript
-
ECMAScript 2026 официально издан, и это серьезный апгрейд для JavaScript. В него вошли Temporal API для работы с датами, метод Map.getOrInsert и новые методы массивов. Эти изменения решают старые проблемы разработчиков, упрощают код и повышают надежность приложений.
Temporal устраняет баги Date, Map.getOrInsert экономит время на проверках, а методы массивов ускоряют обработку данных. Теперь можно писать чище и быстрее код для фронтенда, бэкенда и мобильных приложений. Это особенно полезно для команд, где ошибки с датами или коллекциями тормозят релиз.
Temporal API - прощай, проблемный Date
Temporal API наконец-то заменяет устаревший Date в ECMAScript 2026. Этот namespace вводит immutable объекты для дат, времени, зон и длительностей. Нет больше мутаций, путаницы с часовыми поясами или неудобного парсинга строк. Temporal поддерживает календари, включая григорианский, и работает с наносекундами.
Представьте: раньше Date мутировал при любом setter, вызывая side effects. Теперь все объекты неизменяемы - вызов метода возвращает новый экземпляр. Это упрощает параллельный код и тестирование. Temporal также имеет встроенные методы для сравнений, округлений и арифметики дат. Логично перейти к примерам классов.
Вот ключевые классы Temporal:
- Temporal.Instant - уникальная точка во времени как timestamp.
- Temporal.ZonedDateTime - дата-время с часовым поясом, автоматически учитывает DST.
- Temporal.PlainDate - просто дата без времени, идеально для дней рождения.
- Temporal.Duration - разница между датами, с методами add и subtract.
Класс Что представляет Пример использования Temporal.PlainDateTime Дата и время без зоны let dt = Temporal.PlainDateTime.from(‘2026-03-05T11:00’); Temporal.PlainTime Только время let time = Temporal.PlainTime.from(‘11:07:31’); Temporal.Now Текущее время let now = Temporal.Now.zonedDateTimeISO(‘Europe/Moscow’); Важно: диапазон дат - от -271821 года до +275760, как в Date, но с лучшей точностью.
Пример кода для разницы во времени:
const now = Temporal.Now.instant(); const future = Temporal.Instant.fromEpochMilliseconds(1851222399924); const duration = now.until(future, { smallestUnit: 'hour' }); console.log(duration.toLocaleString('ru-RU')); // Выводит длительность на русскомMap.getOrInsert - удобство для коллекций
В ES2026 Map получает метод getOrInsert, который проверяет ключ и вставляет значение, если его нет. Это как upsert в базах данных - атомарная операция без ручных if. Раньше приходилось писать Map.has() + Map.set(), что уродовало код и рисковало race conditions в асинхронке.
Метод принимает ключ и функцию-фабрику значения. Если ключ существует, возвращает существующее; иначе создает новое и вставляет. Это ускоряет кэширование, счетчики и конфиги. Подходит для серверов, где Map хранит сессии или кэш запросов. Теперь код короче и безопаснее.
Преимущества getOrInsert:
- Атомарность - нет промежуточных проверок.
- Lazy инициализация - значение создается только при необходимости.
- Совместимость с существующими Map.
Старый способ Новый способ с getOrInsert if (!map.has(key)) map.set(key, computeValue(key)); return map.get(key);return map.getOrInsert(key, computeValue);Длинный, подвержен ошибкам Короткий, надежный Нюанс: фабрика вызывается только один раз, даже в многопотоке, благодаря внутренним lock’ам.
Пример для счетчика посещений:
const visits = new Map(); const count = visits.getOrInsert(userId, () => 0) + 1; visits.set(userId, count);Новые методы массивов - мощь для данных
ES2026 добавляет методы для массивов, упрощающие группировку, фильтрацию и трансформации. Это продолжение эволюции от flatMap и at в прошлых версиях. Теперь есть groupBy, toSorted, toReversed - все immutable, возвращают новый массив. Идеально для реактивных UI и data processing.
Раньше сортировка мутировала массив sort(), что ломало состояние в React или Vue. Новые toSorted и toReversed создают копию. GroupBy агрегирует по ключу, как lodash groupBy. Это ускоряет ETL в Node.js и фронте. Логично разобрать на примерах.
Ключевые новые методы:
- Array.prototype.groupBy - группирует по callback.
- Array.prototype.toSorted - сортировка с копированием.
- Array.prototype.toReversed - реверс без мутации.
Метод Старая альтернатива Преимущество toSorted(compareFn) […arr].sort(compareFn) Immutable, короче groupBy(keyFn) lodash.groupBy(arr, keyFn) Встроенный, без deps toReversed() […arr].reverse() Не меняет оригинал Пример группировки пользователей:
const users = [{name: 'Алекс', age: 30}, {name: 'Маша', age: 25}, {name: 'Алекс', age: 35}]; const byAge = users.groupBy(u => u.age > 28 ? 'adult' : 'young'); console.log(byAge); // { adult: , young: [...] }Что Temporal и новинки меняют в проектах
ES2026 делает JavaScript зрелым языком для enterprise. Temporal решает 20-летние боли с датами, Map.getOrInsert упрощает коллекции, методы массивов - data flow. Браузеры и Node.js внедрят это скоро, полифиллы уже есть.
Осталось дождаться полной поддержки в движках. Подумайте, как мигрировать legacy Date в проектах - тесты покажут выгоду. Новые фичи сочетаются с async и modules, усиливая JS в 2026.
Здравствуйте! Похоже, вас заинтересовала эта беседа, но у вас ещё нет аккаунта.
Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.
С вашими комментариями этот пост мог бы стать ещё лучше 💗
Зарегистрироваться Войти© 2024 - 2026 ExLends, Inc. Все права защищены.