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); // falseRegex /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.