ECMAScript 2021, la dernière version de la spécification qui sous-tend JavaScript, a été officiellement approuvée. Parmi les dernières fonctionnalités, on peut notamment citer les améliorations des chaînes de caractères et des promesses (« Promise »).

La spécification a été approuvée par l'ECMA International le 22 juin. ECMAScript 2021 comprend les fonctionnalités suivantes :

- String.prototype.ReplaceAll : la fonctionnalité donne aux développeurs la capacité de remplacer toutes les occurrences d'une sous-chaîne dans une chaîne sans avoir recours à un regexp global. Les développeurs essaient de manière évidente de faire la même chose en JavaScript, et pour l’instant la regexp globale est le moyen le plus répandu pour y parvenir. En ce qui concerne String.prototype.replace, la fonction n'affecte que la première occurrence quand elle est utilisé avec un argument de type chaîne. La solution proposée consisterait à ajouter une méthode replaceAll au prototype String, offrant ainsi aux développeurs une solution simple.

- AggregateError : ce nouveau type d'erreur représente plusieurs erreurs à la fois.

- Promise.any : il s’agit d’un combinateur de promesses qui court-circuite lorsqu'une valeur d'entrée est remplie. Promise.any accepte un itérable de promesses et renvoie une seule promesse qui se résout avec la valeur de cette promesse. Si aucune promesse de l'itérable n'est remplie, la promesse retournée est rejetée avec AggregateError. Cette méthode est l'opposé de Promise.all.

- WeakRef : se réfère à un objet cible sans le préserver du ramasse-miettes. Cette proposition englobe de nouvelles fonctionnalités majeures : la création de références faibles à des objets avec la classe WeakRefcode, et l'exécution de finaliseurs définis par l'utilisateur après le ramassage des objets, à l'aide de la classe FinalizationRegistry. WeakRef et FinalizationRegistry, une autre fonctionnalité ajoutée, sont considérées comme des fonctions avancées, leur utilisation correcte nécessitant une réflexion approfondie. Il est préférable de les éviter, si possible.

- FinalizationRegistry : gère l'enregistrement et le désenregistrement des opérations de nettoyage effectuées lors du ramassage des objets cibles.

- Array.prototype.sort gagne en précision afin de réduire le nombre de cas où l'ordre de tri est défini par l'implémentation.

- Séparateurs pour littéraux numériques : ils permettent aux développeurs de rendre les littéraux numériques plus lisibles en créant une séparation visuelle entre les groupes de chiffres. Les littéraux numériques de grande taille sont difficiles à analyser visuellement, en particulier quand il y a de longues répétitions de chiffres.

- Opérateurs d'affectation logiques : ils combinent les opérateurs logiques avec les expressions d'affectation. Cette proposition repose sur le raisonnement suivant : il existe une douzaine d'opérateurs d'affectation mathématiques, mais aucun pour les opérateurs logiques souvent utilisés.

 

La spécification ECMAScript 2021 fait suite à la spécification ECMAScript 2020, officiellement approuvée en juin dernier. ECMAScript 2020 avait introduit plusieurs fonctionnalités, dont une nouvelle fonction d'importation pour le chargement des modules à un type BigInt qui permet de travailler avec des entiers à précision arbitraire.