Le 30 juin 2026, la 131e Assemblée Générale d'Ecma International, réunie à Genève, a approuvé la 17e édition d'ECMA-262 — ECMAScript 2026. Pas de refonte du langage cette année : sept ajouts ciblés, chacun pensé pour supprimer un bout de code utilitaire qu'on réécrivait à la main depuis des années. C'est le genre de release qui ne fait pas de bruit sur les réseaux sociaux mais qui change des habitudes de code au quotidien.
Combler les trous de l'asynchrone et de l'itération
Array.fromAsync construit un tableau à partir d'un itérable asynchrone, ou d'un générateur synchrone qui yield des promesses. Avant ES2026, il fallait passer par un for await...of manuel accumulé dans un tableau, ou détourner Promise.all en amont. La méthode standardise ce pattern devenu courant dès qu'on pagine une API ou qu'on consomme un flux.
Iterator.concat() répond au même besoin de standardisation côté chaînage : combiner plusieurs itérables en séquence, sans écrire de générateur qui yield successivement de l'un puis de l'autre. Pratique pour fusionner des résultats de recherche paginés ou des flux de logs sans matérialiser un tableau intermédiaire.
Moins de code autour de Map et JSON
Map.prototype.getOrInsert (et son équivalent sur WeakMap) implémente nativement le pattern « upsert » : récupérer la valeur associée à une clé, ou l'insérer si elle n'existe pas encore. C'est le remplaçant direct du if (!map.has(key)) map.set(key, défaut()) qu'on retrouve dans tout code de cache ou de mémoïsation fait maison.
Côté JSON, le reviver passé à JSON.parse reçoit désormais un argument supplémentaire donnant accès au texte source correspondant à la valeur en cours de traitement — utile pour préserver la précision d'un grand nombre au-delà de Number.MAX_SAFE_INTEGER sans bibliothèque tierce. En miroir, JSON.rawJSON() permet d'injecter une valeur JSON brute dans un JSON.stringify(), pour contrôler finement la sérialisation d'une valeur déjà sérialisée ailleurs.
Précision numérique et binaire
Math.sumPrecise additionne un itérable de nombres en minimisant la perte de précision liée à l'arithmétique flottante — un problème classique dès qu'on somme des valeurs d'ordres de grandeur très différents avec un simple reduce. Error.isError() offre de son côté une alternative fiable à instanceof Error, qui échoue silencieusement dès qu'une erreur traverse une frontière de realm (iframe, worker, VM Node).
Enfin, Uint8Array gagne des méthodes natives de conversion vers et depuis le Base64 et l'hexadécimal (toBase64(), toHex(), fromBase64(), fromHex()), qui remplacent l'habituel détour par btoa/atob ou une dépendance dédiée pour manipuler des données binaires.
Pas de rupture, une consolidation
Rien dans cette édition ne casse du code existant : ce sont uniquement des additions. L'intérêt d'ES2026 est ailleurs — dans la suppression progressive de petites bibliothèques utilitaires (encodeurs base64, polyfills d'upsert, helpers de somme précise) dont le seul rôle était de compenser des trous du langage. Le support navigateur et Node.js suivra à des rythmes différents selon les moteurs ; comme toujours avec une spec fraîchement approuvée, vérifier la compatibilité de la cible avant d'adopter ces API en production reste la bonne discipline.