Finalisé en juin 2025 par le TC39, ES2025 est la plus grosse mise à jour de JavaScript depuis les modules ES6. Voici ce que j'utilise concrètement en production.

Iterator helpers

Enfin. Les itérateurs paresseux sont nativement chainables :

const admins = users.values()
  .filter(u => u.role === 'admin')
  .map(u => u.email)
  .take(10)
  .toArray();

Plus besoin de Lodash pour 80 % des cas. Et c'est lazy : rien n'est évalué avant .toArray().

Promise.try

const result = await Promise.try(() => {
  return mayThrowOrReturnPromise(input);
});

Unifie sync et async dans une même chaîne. Utile quand on ne sait pas si la fonction retourne une Promise ou lève une exception synchrone.

Set methods

L'arithmétique ensembliste arrive au niveau du langage :

const a = new Set([1, 2, 3]);
const b = new Set([2, 3, 4]);

a.union(b);        // {1, 2, 3, 4}
a.intersection(b); // {2, 3}
a.difference(b);   // {1}
a.isSubsetOf(b);   // false

Regex /v flag

Classes unicode avec opérations ensemblistes :

const emoji = /[\p{Emoji}--\p{ASCII}]/v;
const cjk = /[\p{Script=Han}&&\p{L}]/v;

Gros progrès pour le traitement texte multilingue.

Array.fromAsync

const files = await Array.fromAsync(
  fileHandles,
  async (h) => await h.text()
);

Équivalent asynchrone d'Array.from(). Disparition d'un pattern classique avec Promise.all(map()).

RegExp escape

const pattern = new RegExp(RegExp.escape(userInput));

Enfin. Plus d'utilitaire maison pour échapper une regex.

Compatibilité runtime

Chrome 124+, Firefox 130+, Safari 18+, Node 22+ : tout est natif. Pour les vieilles cibles, Babel et SWC couvrent tout sauf les méthodes d'instance (Set.prototype.union nécessite un polyfill).

Ce qui arrive en ES2026

Decorators (stage 3 depuis 2024, enfin shippé), Records & Tuples (immuables natifs), Temporal (enfin en stage 4) — on y arrive. Je leur consacrerai un article dédié.

Vous maintenez une app JS un peu ancienne ? Je fais des audits de modernisation chez SunderDev.