ECMAScript 2026 финализирован: Promise.try, Float16Array и RegExp.escape в действии
-
ECMAScript 2026 официально финализирован. Это обновление добавляет Promise.try, Float16Array и RegExp.escape, которые упрощают работу с асинхронностью, графикой и регулярными выражениями.
Эти фичи решают повседневные проблемы разработчиков. Promise.try предотвращает ошибки при обертке функций, Float16Array экономит память в WebGL, а RegExp.escape защищает от уязвимостей в паттернах. Теперь код становится чище и надежнее без лишних библиотек.
Promise.try: безопасная обертка операций
Promise.try - это новый статический метод Promise, который безопасно оборачивает любую функцию в промис. Он ловит синхронные ошибки и возвращает resolved промис с результатом или rejected с ошибкой. Без него вызов Promise.resolve(nonPromise) кидает TypeError, если функция не имеет метода then.
Рассмотрим типичный сценарий: обработка пользовательского ввода или вызов API. Раньше приходилось писать try-catch внутри async функции или использовать библиотеки вроде Bluebird. Promise.try упрощает это, делая код декларативным. Например, при чтении файла или вычислении данных оно автоматически превращает синхронный код в асинхронный без крашей.
- Автоматическая обработка ошибок: Promise.try(fn) всегда возвращает промис, даже если fn кидает ошибку синхронно.
- Поддержка async/await: Идеально сочетается с await, упрощая цепочки промисов.
- Совместимость: Работает с любыми функциями, включая стрелочные, без проверки типов.
Сценарий Без Promise.try С Promise.try Синхронная функция try { await fn() } catch {} await Promise.try(fn) Ошибка в fn TypeError Rejected промис Успех Работает Resolved промис Важно: Метод не меняет поведение async функций, но спасает от неожиданных исключений в колбэках.
Float16Array: экономия памяти для графики
Float16Array - новый TypedArray для 16-битных чисел с плавающей записью. Он хранит значения в формате half-precision float, занимая вдвое меньше места, чем Float32Array. Это критично для приложений с большими массивами данных, как шейдеры в WebGL или машинное обучение в браузере.
Представьте обработку изображений или 3D-моделей: стандартный Float32Array жрет память, особенно на мобильных устройствах. Float16Array снижает потребление вдвое без сильной потери точности - достаточно для большинства графических задач. В движках вроде V8 или SpiderMonkey оно уже тестируется для ускорения рендеринга.
- Компактность: 2 байта на элемент против 4 у Float32.
- WebGL-интеграция: Прямо используется в буферах для вершин и текстур.
- Производительность: Быстрее на GPU, где память - bottleneck.
Тип Размер (байт) Точность Применение Float16Array 2 ~3-4 знака Графика, ML Float32Array 4 ~7 знаков Общие вычисления Float64Array 8 ~15 знаков Финансы Нюанс: Конвертация из Float32 может привести к округлению, тестируйте на точность.
RegExp.escape: защита от инъекций в паттернах
RegExp.escape - статический метод, который экранирует специальные символы в строке для безопасного использования в RegExp. Без него символы вроде . или * интерпретируются как метасимволы, что приводит к ошибкам или уязвимостям при пользовательском вводе.
Допустим, поиск по токену с точкой: /user.token/ит не только ‘user.token’, но и ‘userXtoken’. RegExp.escape(‘user.token’) вернет ‘user.token’, делая паттерн точным. Это стандартный способ защиты от ReDoS или неверных матчей в валидаторах и роутерах.
- Автоматическая экранировка( ) { } |.
- Пользовательский ввод: Безопасно для поисковых форм и фильтров.
- Производительность: Быстрее ручного экранирования через replace.
Строка Без escape С RegExp.escape() user.* Любая последовательность user.* [test] Класс символов [test] .com Любой символ + com .com Подсказка: Используйте с new RegExp для динамических паттернов.
Методы Set и итераторы: множества на стероидах
ECMAScript 2026 расширяет Set новыми методами: union, intersection, difference, symmetricDifference. Они позволяют выполнять операции над множествами без ручных циклов или lodash. Плюс глобальный Iterator с методами вроде concat для объединения итераторов.
Это упрощает работу с данными: фильтрацию пользователей, обработку уникальных ID или анализ логов. Раньше union требовал forEach и new Set, теперь один вызов. Iterator.concat склеивает последовательности без генераторов, как в Python.
- union(): Объединение множеств.
- intersection(): Пересечение.
- difference(): Разность.
Операция Пример Результат union set1.union(set2) Все элементы intersection set1.intersection(set2) Общие difference set1.difference(set2) Только в set1 Фича: Работает с любыми iterable, включая строки и массивы.
Что добавит ECMAScript 2026 в практику
Эти обновления финализированы и скоро появятся в Node.js и браузерах. Promise.try и RegExp.escape решат 80% болей с асинхронностью и валидацией, Float16Array ускорит графику. За кадром остались Temporal API и Math.sumPrecise - они сделают дату и математику надежнее.
Стоит протестировать в V8 с флагами или Babel. Дальше ждем оптимизаций для TypeScript и новых API для данных - JavaScript эволюционирует быстро.
© 2024 - 2026 ExLends, Inc. Все права защищены.