ECMAScript 2026 вышел: Map.getOrInsert, Set методы и Temporal API меняют разработку
-
ECMAScript 2026 только что вышел, и он приносит долгожданные изменения в JavaScript. Главные новинки - это методы для Map.getOrInsert и Set, плюс полноценный Temporal API для работы с датами. Эти фичи упростят код, сделают его надежнее и избавят от болячек старого Date.
Зачем это нужно? Разработчики часто мучаются с проверками ключей в Map или сложными датами в разных зонах. Теперь код станет короче, а ошибки - реже. Давайте разберем, как это работает на практике и почему экосистема разработки уже меняется.
Map.getOrInsert и новые методы Set: проще манипуляции с данными
Метод Map.getOrInsert позволяет сразу получать значение по ключу или вставлять новое, если ключа нет. Это избавляет от шаблонного кода с has() и set(). Представьте: раньше писали if (!map.has(key)) map.set(key, defaultValue); return map.get(key). Теперь один вызов - и готово.
Для Set добавили методы вроде addIfNotPresent или union/intersection, которые упрощают операции над множествами. Это полезно в алгоритмах, фильтрах данных или кэшах. Например, при объединении наборов пользователей без дубликатов код сокращается вдвое. Такие улучшения ускоряют разработку бэкенда и фронта, где коллекции используются повсеместно.
Вот ключевые методы для Map и Set в ES2026:
- Map.getOrInsert(key, factory): возвращает значение или создает через factory-функцию.
- Set.union(otherSet): возвращает новое множество с объединением.
- Set.intersection(otherSet): только общие элементы.
- Map.merge(otherMap): сливает карты с обработкой коллизий.
Метод Старый способ Новый способ Получить/вставить в Map if (!m.has(k)) m.set(k, v); m.get(k) m.getOrInsert(k, () => v) Объединение Set new Set([…s1, …s2]) s1.union(s2) Пересечение Set new Set([…s1].filter(x => s2.has(x))) s1.intersection(s2) Важно: factory в getOrInsert вызывается только при отсутствии ключа, что экономит ресурсы.
Temporal API: прощай, проблемный Date
Temporal API - это новая стандартная система для дат и времени, которая заменяет устаревший Date. Date notorious за мутабельность, проблемы с часовыми поясами и неопределенное поведение с leap seconds. Temporal объекты неизменяемы, поддерживают time zones и календари из коробки.
Temporal вводит классы вроде Temporal.ZonedDateTime, Temporal.Duration и Temporal.PlainDate. Они парсят ISO 8601 точно, без сюрпризов. Например, добавление дней всегда учитывает месяц и високосные годы. Это критично для приложений с расписаниями, финансовыми транзакциями или международными пользователями.
Основные классы Temporal:
- Temporal.PlainDate: дата без времени.
- Temporal.PlainDateTime: дата + время.
- Temporal.ZonedDateTime: с часовым поясом.
- Temporal.Duration: разница между датами.
- Temporal.Now: текущая дата/время.
Пример: const dt = Temporal.Now.zonedDateTimeISO(‘Europe/Moscow’); dt.add({days: 1}).toString() даст точный результат без глюков.
Свойство Date Temporal Изменяемость Мутабельный Неизменяемый Time zones Строки вроде ‘UTC’ Полные идентификаторы Календари Только Gregorian Любые, включая японский Диапазон Ограничен От -271821 до +275760 года Нюанс: Temporal использует 24-часовой формат и игнорирует leap seconds для предсказуемости.
Ресурсное управление: using и await using
ES2026 вводит using и await using для автоматической очистки ресурсов. Это как RAII в C++ или with в Python - ресурсы вроде файлов или соединений закрываются при выходе из блока, даже при ошибках.
Синхронный using подходит для локальных файлов, асинхронный await using - для сетевых запросов или БД. Переменные блок-локальные и immutable, как const. Нет нужды в try-finally, код чище и безопаснее.
Преимущества:
- Автоматическая утилизация.
- Поддержка async/await.
- Снижение утечек памяти.
Пример:
await using stream = fetch(url).then(r => r.body); // stream закроется автоматическиНовые инструменты для async и массивов
Появился Array.fromAsync() для создания массивов из асинхронных итераторов. Полезно при парсинге данных из API. Также Error.isError() для точной проверки ошибок и Base64/HEX для Uint8Array.
Это ускоряет работу с данными в Node.js и браузерах. Pattern Matching и Records/Tuples на Stage 3 добавляют функциональность.
Ключевые фичи:
- Array.fromAsync(iterable).
- Uint8Array.fromBase64(str).
- using res = openFile(path).
Фича Применение Array.fromAsync Параллельный fetch using File handles Error.isError Гибкие проверки Temporal меняет правила игры в JS
ES2026 с Map.getOrInsert, Set-методами и Temporal решает накопившиеся проблемы JavaScript. Код становится короче, надежнее, особенно в enterprise-приложениях. Осталось дождаться полной поддержки в Safari и потестировать polyfill’ы.
Эти изменения повлияют на библиотеки вроде Moment.js - многие мигрируют на Temporal. Стоит присмотреться к комбинациям с Intl API для локализации.
Здравствуйте! Похоже, вас заинтересовала эта беседа, но у вас ещё нет аккаунта.
Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.
С вашими комментариями этот пост мог бы стать ещё лучше 💗
Зарегистрироваться Войти© 2024 - 2026 ExLends, Inc. Все права защищены.