<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Браузерная поддержка ECMAScript 2026: Temporal API и Map.getOrInsert в Chrome 145]]></title><description><![CDATA[<p dir="auto">Chrome 145 принес важные обновления для JavaScript-разработчиков. В этой версии браузера появились ключевые фичи из ECMAScript 2026 - Temporal API и метод Map.getOrInsert. Эти нововведения решают старые проблемы с датами и коллекциями, упрощая код и снижая ошибки.</p>
<p dir="auto">Temporal API заменяет ненадежный Date, а Map.getOrInsert упрощает работу с картами. Поддержка в Chrome 145 означает, что можно использовать их в продакшене без полифиллов. Это ускорит разработку и повысит надежность приложений.</p>
<h2>Temporal API: прощание с проблемами Date</h2>
<p dir="auto">Temporal API - это современная система для работы с датами и временем в JavaScript. Она достигла стадии 4 в TC39 и интегрирована в Chrome 145. В отличие от Date, Temporal разделяет понятия даты, времени, зоны и интервалов на отдельные типы, что исключает неоднозначности.</p>
<p dir="auto">Представьте задачу: назначить встречу в Berlin 31 января 2026 в 14:00. С Date результат зависит от локальной зоны, что приводит к сдвигам. Temporal требует явного указания зоны, делая поведение предсказуемым. Реализация в V8 использует библиотеку temporal_rs версии 0.1, которая проходит все тесты.</p>
<p dir="auto">Firefox уже поддерживает Temporal, Safari развивает полифилл, а Chrome 145 делает его стандартным. Это меняет подход к парсингу, форматированию и арифметике дат. Код становится чище, ошибки реже.</p>
<ul>
<li><strong>ZonedDateTime</strong>: для моментов с зоной, пример: <code>new Temporal.ZonedDateTime(1738278000000n, 'Europe/Berlin')</code>.</li>
<li><strong>PlainDate</strong>: чистая дата без времени, идеальна для календарей.</li>
<li><strong>Duration</strong>: интервалы, с методами add/subtract, устойчивы к переполнению.</li>
<li><strong>Instant</strong>: глобальное время, не зависит от локали.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Свойство</th>
<th>Date</th>
<th>Temporal</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Зоны</strong></td>
<td>Неявные</td>
<td>Явные, полная поддержка</td>
</tr>
<tr>
<td><strong>Изменяемость</strong></td>
<td>Мутабельный</td>
<td>Неизменяемый</td>
</tr>
<tr>
<td><strong>Форматирование</strong></td>
<td>Локальное</td>
<td>Настраиваемое, i18n</td>
</tr>
<tr>
<td><strong>Ошибки</strong></td>
<td>Тихие</td>
<td>Явные исключения</td>
</tr>
</tbody>
</table>
<p dir="auto"><em>Важно</em>: Temporal неизменяем, все операции возвращают новые объекты.</p>
<h2>Map.getOrInsert: удобство для коллекций</h2>
<p dir="auto">Метод Map.getOrInsert - новинка ECMAScript 2026, доступна в Chrome 145. Он проверяет ключ в Map и возвращает значение, если оно есть, или вставляет значение по умолчанию и возвращает его. Это избавляет от шаблонного кода с has/get/set.</p>
<p dir="auto">Раньше для кэша писали: <code>if (!map.has(key)) map.set(key, defaultValue); return map.get(key);</code>. Теперь один вызов: <code>map.getOrInsert(key, () =&gt; defaultValue)</code>. Функция создается лениво, только при отсутствии ключа. Поддержка в V8 оптимизирована для производительности.</p>
<p dir="auto">Это полезно в реактивных приложениях, где Map хранит состояния. Chrome 145 интегрирует это в стабильную ветку, без флагов. Другие движки следуют, но Chrome лидирует.</p>
<ul>
<li><strong>Синтаксис</strong>: <code>map.getOrInsert(key, creatorFn)</code> - creatorFn вызывается раз.</li>
<li><strong>Производительность</strong>: быстрее if-has-set, меньше операций.</li>
<li><strong>Применение</strong>: кэши, счетчики, конфиги по умолчанию.</li>
<li><strong>Совместимость</strong>: полифилл не нужен в Chrome 145+.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Сценарий</th>
<th>Старый код</th>
<th>Новый код</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Кэш</strong></td>
<td>if/get/set</td>
<td>getOrInsert</td>
</tr>
<tr>
<td><strong>Счетчик</strong></td>
<td>has ? ++ : set(0)</td>
<td>getOrInsert(key, () =&gt; 0)++</td>
</tr>
<tr>
<td><strong>Размер</strong></td>
<td>3 строки</td>
<td>1 строка</td>
</tr>
</tbody>
</table>
<p dir="auto"><em>Нюанс</em>: creatorFn должна быть чистой функцией, без сайд-эффектов.</p>
<h2>Браузерная поддержка в Chrome 145</h2>
<p dir="auto">Chrome 145 вышла в феврале 2026, с фокусом на безопасность и JS-улучшения. Temporal и Map.getOrInsert - часть ECMAScript 2026, ожидаемого весной. Версия 145.0.7632.75+ для Windows/macOS и 144+ для Linux.</p>
<p dir="auto">Другие фичи: улучшения WebRTC, CSS text-justify, JPEG-XL. Но Temporal и Map - ключевые для фронтенда. Тестируйте в devtools, обновляйтесь timely.</p>
<p dir="auto">Проверка поддержки: <code>typeof Temporal !== 'undefined'</code> и <code>Map.prototype.getOrInsert</code>. Стабильно в Chrome 145.</p>
<ul>
<li><strong>Стадии</strong>: Temporal - stage 4, Map.getOrInsert - в процессе.</li>
<li><strong>Полифиллы</strong>: @js-temporal/polyfill для старых браузеров.</li>
<li><strong>Тесты</strong>: используйте testharness.js из repo TC39.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Браузер</th>
<th>Temporal</th>
<th>Map.getOrInsert</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Chrome 145</strong></td>
<td>Да</td>
<td>Да</td>
</tr>
<tr>
<td><strong>Firefox</strong></td>
<td>Да</td>
<td>Скоро</td>
</tr>
<tr>
<td><strong>Safari</strong></td>
<td>Полифилл</td>
<td>В разработке</td>
</tr>
</tbody>
</table>
<p dir="auto"><em>Совет</em>: комбинируйте с Promise.withResolvers для async.</p>
<h2>Что дает ECMAScript 2026 фронтенду</h2>
<p dir="auto">Temporal и Map.getOrInsert поднимают JavaScript на новый уровень. Они закрывают пробелы в стандартной библиотеке, делая код короче и надежнее. Chrome 145 ускоряет adoption этих фич.</p>
<p dir="auto">Остается ждать полной кросс-браузерности и интеграции с фреймворками. Подумайте, как переписать Date-код на Temporal в своих проектах - это сэкономит часы дебага.</p>
]]></description><link>https://forum.exlends.ru/topic/994/brauzernaya-podderzhka-ecmascript-2026-temporal-api-i-map.getorinsert-v-chrome-145</link><generator>RSS for Node</generator><lastBuildDate>Sat, 17 Oct 2026 04:05:45 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/994.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 03 Mar 2026 14:17:15 GMT</pubDate><ttl>60</ttl></channel></rss>