JavaScript обновляется каждый год, но многие разработчики до сих пор пишут на уровне приёмов пятилетней давности. За последние два стандарта язык получил несколько вещей, которые убирают целые классы костылей. Разберём, что реально стоит начать использовать и где для этого хватит вашего окружения.

Object.groupBy: конец громоздким reduce

Группировка массива по признаку — частая задача, которую раньше решали через reduce с накоплением объекта. Метод Object.groupBy делает это в одну строку: вы передаёте массив и функцию, возвращающую ключ группы. Он появился ещё в марте 2024 года и поддерживается во всех основных браузерах. Код, который раньше занимал пять строк и требовал внимательности, теперь читается с первого взгляда.

Promise.withResolvers: промис без обёрток

Иногда нужно создать промис и разрешить его извне — из обработчика события или колбэка. Раньше для этого городили обёртку и сохраняли resolve и reject в переменные снаружи конструктора. Метод Promise.withResolvers возвращает сразу объект с тремя полями: сам промис, функцию resolve и функцию reject. Логика разрешения вынесена наружу чисто, без замыканий вокруг конструктора.

Promise.try: единая обработка ошибок

Функция может бросить ошибку синхронно, а может вернуть промис, который отклонится позже. Раньше эти два случая приходилось ловить по-разному. Promise.try приводит их к одному знаменателю: вы оборачиваете вызов, и любая ошибка — синхронная или асинхронная — попадает в общий catch. Это убирает ветвление в коде, который должен одинаково реагировать на оба типа сбоев.

Операции над множествами

Объект Set наконец научился привычным операциям из теории множеств. Теперь доступны методы прямо на множествах:

  • intersection — пересечение двух множеств.
  • difference — разность.
  • symmetricDifference — симметрическая разность.

Раньше всё это писали вручную через фильтры и проверки has, теперь — одним вызовом метода.

Хелперы итераторов