Spécifications ECMAScript 2020 pour JavaScript approuvées

ECMAScript 2020, la dernière version de la spécification officielle sous-jacente à JavaScript, a été officiellement approuvée par ECMA International et le comité technique de l'ECMA supervisant la spécification, le 16 juin. 

ECMAScript 2020 introduit plusieurs fonctionnalités allant d'une nouvelle fonctionnalité  import() de chargement de modules à un nouveau  BigInt type permettant de travailler avec des entiers de précision arbitraires. 

Les fonctionnalités spécifiques introduites par ECMAScript 2020 incluent:

  • Un import()module «de type fonction» chargeant la syntaxe pour importer de manière asynchrone des modules avec un spécificateur dynamique. La proposition ajoute une import(specifier)forme syntaxique, agissant à bien des égards comme une fonction. Il renvoie une promesse pour l'objet d'espace de noms de module du module demandé, créé après l'extraction, l'instanciation et l'évaluation des dépendances d'un module, ainsi que le module lui-même. Le  specifiersera interprété de la même manière que dans une importdéclaration. Bien que ce specifiersoit une chaîne, ce n'est pas nécessairement un littéral de chaîne; ainsi, le code comme import(`./language-packs/${navigator.language}.js`)fonctionnera. Cela n'a pas été possible avec les importdéclarations habituelles . Avec le plan,import() est proposé de travailler à la fois dans les modules et les scripts, donnant au code de script un point d'entrée asynchrone facile dans le monde des modules et lui permettant de commencer à exécuter le code du module.
  • BigInt,une nouvelle primitive numérique pour travailler avec des entiers de précision arbitraires. BigIntpeut représenter des nombres supérieurs à deux à la puissance 53, le plus grand nombre que JavaScript peut représenter de manière fiable avec la Numberprimitive. A BigIntest créé en ajoutant nà la fin de l'entier ou en appelant le constructeur.
  • La matchAllméthode pour les chaînes, pour produire un itérateur pour tous les objets correspondants générés par une expression régulière globale. La justification de cette proposition est que si un développeur a une chaîne et une expression régulière collante ou globale avec plusieurs groupes de capture, le développeur peut vouloir parcourir toutes les correspondances, pour lesquelles il existe actuellement plusieurs options mais avec des limitations. String#matchAll résout les problèmes en donnant accès à tous les groupes de capture et en ne mutant pas visiblement l'objet d'expression régulière en question.
  • Promise.allSettled, un nouveau combinateur Promise qui ne court-circuite pas. Cela renvoie une promesse qui est remplie avec un tableau d'instantanés de l'état de la promesse, mais seulement après que les promesses d'origine se sont réglées, c'est-à-dire qu'elles ont été soit remplies soit rejetées.
  • globalThis, fournissant un moyen universel d'accéder à la thisvaleur globale .
  • Une export * as ns from ‘module’syntaxe dédiée à utiliser dans les modules.
  • Standardisation accrue de l' for-inordre d'énumération, spécifiant partiellement l'ordre d'énumération dans JavaScript.
  • import.meta,un objet rempli par l'hôte dans les modules qui peut contenir des informations contextuelles. Cela sert de méta-propriété JavaScript, contenant des métadonnées spécifiques à l'hôte sur le module actuel.
  • Nullish coalescing, un opérateur de sélection de valeur pour une meilleure gestion des cas impliquant des accès aux propriétés. C'est une fonction de syntaxe pour améliorer le travail avec des valeurs «nulles» ( nullou non définies).
  • Chaînage facultatif, un opérateur d'accès à la propriété et d'invocation de fonction qui court-circuitera si la valeur à accéder / invoquer est nulle. 

La dernière mise à jour d'ECMAScript, ECMAScript 2019, présentait des fonctionnalités telles que prototype.flatMap les tableaux imbriqués.