Перейти к содержанию
  • Лента
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
exlends
Категории
  1. Главная
  2. Категории
  3. Языки программирования
  4. JavaScript
  5. ECMAScript 2026 издан: Temporal API, Map.getOrInsert и новые методы массивов меняют JavaScript

ECMAScript 2026 издан: Temporal API, Map.getOrInsert и новые методы массивов меняют JavaScript

Запланировано Прикреплена Закрыта Перенесена JavaScript
ecmascript 2026temporal apijavascript
1 Сообщения 1 Постеры 55 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • hannadevH Не в сети
    hannadevH Не в сети
    hannadev
    написал в отредактировано
    #1

    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.

    1 ответ Последний ответ
    0

    Здравствуйте! Похоже, вас заинтересовала эта беседа, но у вас ещё нет аккаунта.

    Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.

    С вашими комментариями этот пост мог бы стать ещё лучше 💗

    Зарегистрироваться Войти

    Категории

    • Главная
    • Новости
    • Фронтенд
    • Бекенд
    • Языки программирования

    Контакты

    • Сотрудничество
    • info@exlends.com

    © 2024 - 2026 ExLends, Inc. Все права защищены.

    Политика конфиденциальности
    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Войдите или зарегистрируйтесь для поиска.
    • Первое сообщение
      Последнее сообщение
    0
    • Лента
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы