В 2025–2026 годах язык JavaScript (стандарты ECMAScript 2025 и ES2026) получил множество практичных обновлений. Комитет TC39 сосредоточился на устранении «боли» разработчиков — избавлении от рутинного написания велосипедов, улучшении работы с асинхронностью, коллекциями и данными.
Главные нововведения за этот период можно разделить на несколько ключевых блоков:
1. Главные фичи ECMAScript 2025 (утвержден летом 2025)
- Iterator Helpers (Методы-помощники для итераторов): У итераторов появились встроенные методы вроде
.map(),.filter(),.take(),.drop(),.flatMap()и др. Теперь обрабатывать ленивые последовательности данных можно «из коробки», не создавая на каждом шаге промежуточные массивы в памяти. - Новые методы для Set (Множеств): Объекты
Setобзавелись полноценными математическими операциями:set.union(other)— объединение.set.intersection(other)— пересечение.set.difference(other)— разность.set.symmetricDifference(other)— симметричная разность.- А также методы проверки отношений:
isSubsetOf,isSupersetOf,isDisjointFrom.
- Импорт JSON как модуля (Import Attributes): Теперь можно импортировать JSON-файлы напрямую с помощью синтаксиса атрибутов (
with { type: 'json' }), без необходимости подключать сторонние сборщики или писать костыли:
import config from './config.json' with { type: 'json' };
RegExp.escape: Долгожданный метод, который экранирует специальные символы в строках для регулярных выражений. Это защищает код от уязвимостей (RegEx Injection), когда в регулярку подставляется нефильтрованный пользовательский ввод.Promise.try(): Удобный статический метод, который оборачивает синхронный или асинхронный вызов функции в промис. Это избавляет от необходимости писать конструкции вродеnew Promise(resolve => resolve(fn())).- Float16Array: Появление типизированного массива для 16-битных чисел с плавающей запятой — важная вещь для оптимизации памяти, работы с графикой, WebGL и локальными ML-моделями.
2. Главные фичи ECMAScript 2026 (утвержден в июне 2026)
Array.fromAsync(): Позволяет напрямую собирать массивы из асинхронных итераторов или генераторов. Идеально для потоковых данных, постраничных API (pagination) или работы с курсорами БД.Map.prototype.getOrInsert(): Упрощает работу с картами (Map), когда нужно получить значение по ключу, а если его нет — автоматически записать туда дефолтное значение. Больше не нужно писать проверки.has()/.set().Iterator.concat(): Позволяет «склеивать» несколько итераторов в один последовательный поток без выделения лишней памяти под массивы.Error.isError(): Надежный глобальный способ проверить, является ли переданный объект ошибкой (Error), что критично при работе со сложными микрофронтендами или iframe.Math.sumPrecise(): Решает классическую проблему JS с точностью чисел с плавающей запятой при суммировании массивов разной величины.- Нативная поддержка Base64 и Hex для
Uint8Array: Методы кодирования и декодирования бинарных данных теперь встроены на уровне языка. - Улучшения в
JSON: Ревивер вJSON.parse()получил доступ к исходному текстовому сегменту (context) для парсинга огромных чисел (например,BigInt) без потери точности, а также появился методJSON.rawJSON().
Экосистема JavaScript стала еще более зрелой. Писать код для работы с коллекциями, асинхронными потоками и бинарными данными теперь значительно проще и чище.