Les spécifications de ECMAScript 2021 sont achevées

Par:
fredericmazue

mer, 03/02/2021 - 12:28

Le comité TC39 de l'ECMA, qui s'occupe du standard ECMAScript, a publié les spécifications de ECMAScript 2021. Cette publication est un 'draft', c'est à dire un projet de norme qui en tant que tel est susceptible d'être encore légèrement modifié. Le document contient les propositions de nouvelles fonctionnalités qui ont été retenues pour le langage JavaScript. ECMASCript 2021 devrait être finalisé dans le courant de cette année.

Parmi ces nouvelles fonctionnalités, nous pouvons d'abord remarquer l'arrivée d'une nouvelle méthode de chaîne. C'est pas une grosse évolution sur le fond, mais elle était attendue depuis longtemps. Il s'agit de la méthode replaceAll qui affecte toutes les correspondances trouvées dans une chaîne au lieu de la première seulement comme avec la méthode replace, sauf si cette dernière est utilisée avec une expression régulière.

Concrètement, pour cette chaîne

const  str  =  "Le renard brun est vraiment brun" ;

si l'on veut remplacer brun par blanc, au lieu d'une invocation de la méthode replace avec une expression régulière :

const  newStr  =  str.remplace(/brun/g ,  "blanc") ;

il devient possible de simplement faire :

const  newStr  =  str.replaceAll ("marron" ,  "blanc") ;

A remarquer encore l'arrivée du modificateur de visibilité privé pour les méthodes et les accesseurs ce qui permet une écriture de code 'plus orientée objet'.

Par exemple :

class Person {
  constructor(name, birhdate, city) {
    this.name = name;
    this.birthdate = birthdate;
    this.city = age;
  }

  get #Age() {
    //return actual age
  }

  #myPrivateMethod() {    console.log("You can't use this from outside of this class")
  }
}

Le caractère # permet de rendre une méthode ou un accesseur privée. le caractère # devient partie intégrante du nom de méthode ou d'accesseur. On écrira donc

this.#Age

ou

this.#myPrivateMethod()

Une exception sera levée dans le cas d'une tentative d'utilisation d'un accesseur ou d'une méthode en dehors de sa classe ou depuis une classe dérivée.

A remarquer aussi l'arrivée d'un nouveau combinateur de promise : Promise.any(), aux côtés de romise.all(), Promise.race(), Promise.allSettled().

Tandis que Promise.all() renvoie un tableau de promesses remplies, Promise.any() renvoie la première promesse remplie. Promise.any() est différent de Promise.race() dans le sens où ce dernier renvoie la première promesse réglée, c'est-à-dire soit remplie soit rejetée, tandis que Promise.any() ignore les promesses rejetées.

Le draft ECMAScript peut être consulté ici.