Pour rappel, ECMAScript est une spécification de langage de script qui a été développée par ECMA International, une organisation de standardisation fondée en 1961 à Genève, en Suisse. Sa norme la plus connue est ECMAScript, qui est la norme pour JavaScript. La norme ECMAScript est largement utilisée pour les scripts côté client dans les navigateurs Web, et elle est également utilisée pour les scripts côté serveur avec Node.js. De nouvelles fonctionnalités sont régulièrement ajoutées à la norme et dans le cadre de la mise à jour de cette année, les quatre fonctionnalités mentionnées ci-dessous devraient être ajoutées au langage JavaScript.
Les versions actualisées de l'ECMAScript sont traditionnellement finalisées par l'ECMA en juin. La version 2022 de l'ECMAScript de l'année dernière comportait des éléments de classe et des capacités d'attente de premier niveau.
Les méthodes .findlast() et .findLastIndex()
Ces deux nouvelles méthodes pour les tableaux vous permettent de rechercher un élément dans un tableau à partir de la fin du tableau, plutôt qu'à partir du début. Lorsque l'itération se fait à partir du début d'un tableau, la boucle doit vérifier chaque élément du tableau jusqu'à ce qu'elle trouve l'élément souhaité. En revanche, si la recherche commence à la fin du tableau, la boucle peut s'arrêter plus tôt si elle trouve l'élément souhaité et qu'il est proche de la fin du tableau.
Code JavaScript : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | const array = [{ value: 1 }, { value: 2 }, { value: 3 }, { value: 4 }]; array.find(n => n.value % 2 === 1); // { value: 1 } array.findIndex(n => n.value % 2 === 1); // 0 // ======== Before the proposal =========== // find [...array].reverse().find(n => n.value % 2 === 1); // { value: 3 } // findIndex array.length - 1 - [...array].reverse().findIndex(n => n.value % 2 === 1); // 2 array.length - 1 - [...array].reverse().findIndex(n => n.value === 42); // should be -1, but 4 // ======== In the proposal =========== // find array.findLast(n => n.value % 2 === 1); // { value: 3 } // findIndex array.findLastIndex(n => n.value % 2 === 1); // 2 array.findLastIndex(n => n.value === 42); // -1 |
Il en résulte moins d'itérations, ce qui peut améliorer les performances. En termes d'efficacité de la mémoire, l'itération d'un tableau à partir du dernier élément peut parfois être bénéfique lorsque le tableau est très grand et que l'utilisation de la mémoire est un problème. Dans ce cas, commencer la recherche à partir de la fin du tableau peut permettre à la boucle de se terminer plus tôt, réduisant ainsi l'empreinte mémoire du programme.
Utilisation des symboles comme clés WeakMap
Un WeakMap est une collection de paires clé/valeur dont les clés doivent être des objets ou des symboles non enregistrés, avec des valeurs de n'importe quel type JavaScript arbitraire, et qui ne crée pas de références fortes à ses clés. En d'autres termes, la présence d'un objet en tant que clé dans une WeakMap n'empêche pas l'objet d'être ramassé à la poubelle. Une fois qu'un objet utilisé comme clé a été collecté, ses valeurs correspondantes dans n'importe quel WeakMap deviennent également candidates à la collecte des ordures - tant qu'elles ne sont pas fortement référencées ailleurs.
Code JavaScript : | Sélectionner tout |
1 2 3 4 5 6 7 | const weak = new WeakMap(); // Pun not intended: being a symbol makes it become a more symbolic key const key = Symbol('my ref'); const someObject = { /* data data data */ }; weak.set(key, someObject); |
Le seul type primitif qui peut être utilisé comme clé d'une WeakMap est le symbole - plus précisément, les symboles non enregistrés - car les symboles non enregistrés sont garantis uniques et ne peuvent pas être recréés. Actuellement, les WeakMaps n'autorisent que les clés d'objets. Cela signifie que si vous voulez utiliser une clé qui n'est pas un objet, vous devez utiliser une solution de contournement telle que l'utilisation d'un objet comme clé et le stockage de la valeur souhaitée en tant que propriété de cet objet. Mais la spécification ECMAScript 2023 annonce la prise en charge de l'utilisation de symboles comme clés WeakMap.
Code JavaScript : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | const objectLookup = new WeakMap(); const otherRealm = new ShadowRealm(); const coinFlip = otherRealm.evaluate(`(a, b) => Math.random() > 0.5 ? a : b;`); // later... let a = { name: 'alice' }; let b = { name: 'bob' }; let symbolA = Symbol(); let symbolB = Symbol(); objectLookup.set(symbolA, a); objectLookup.set(symbolB, b); a = b = null; // ok to drop direct object references // connected identities preserved as the symbols round-tripped through the other realm let chosen = objectLookup.get(coinFlip(symbolA, symbolB)); assert(['alice', 'bob'].includes(chosen.name)); |
En autorisant l'utilisation de symboles comme clés dans les WeakMaps, le changement à venir dans ECMAScript 2023 simplifiera ce processus et rendra plus intuitive l'utilisation de symboles comme clés dans les WeakMaps par les développeurs. En outre, elle fournira une approche plus cohérente de l'utilisation de symboles comme clés dans différentes structures de données JavaScript, telles que Maps et Sets, qui prennent déjà en charge l'utilisation de symboles comme clés.
Modifier un tableau copié tout en conservant le tableau original
Actuellement, en JavaScript, la plupart des méthodes de tableau telles que push(), pop(), shift() et unshift() modifient le tableau original en place. Avec la nouvelle proposition d'ECMAScript 2023, les développeurs pourront modifier un tableau en créant une copie de celui-ci avec les changements souhaités. Cette proposition fournit des méthodes supplémentaires sur [C=JavaScript]Array.prototype[/B] et TypedArray.prototype pour permettre des changements sur le tableau en renvoyant une nouvelle copie de celui-ci avec le changement.
Code JavaScript : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 | const sequence = [1, 2, 3]; sequence.toReversed(); // => [3, 2, 1] sequence; // => [1, 2, 3] const outOfOrder = new Uint8Array([3, 1, 2]); outOfOrder.toSorted(); // => Uint8Array [1, 2, 3] outOfOrder; // => Uint8Array [3, 1, 2] const correctionNeeded = [1, 1, 3]; correctionNeeded.with(1, 2); // => [1, 2, 3] correctionNeeded; // => [1, 1, 3] |
La modification d'un tableau par copie peut être utile dans certains scénarios. Par exemple, cela peut permettre d'éviter des effets secondaires inattendus dans des bases de code complexes où plusieurs parties du code peuvent modifier le même tableau.
Grammaire shebang/hashbang
Il s'agit d'une proposition pour correspondre à l'usage de facto dans certains hôtes JS CLI qui permettent les Shebangs/Hashbang. Ces hôtes suppriment le hashbang pour générer des textes sources JS valides avant de les transmettre aux moteurs JS. Ce plan déplacerait le dépouillement vers les moteurs et unifierait et normaliserait la façon dont cela est fait. Pour précisément, la grammaire shebangs/hashbangs indique au système d'exploitation l'interpréteur à utiliser pour exécuter un script. Votre navigateur est livré avec un interpréteur par défaut, mais votre ligne de commande n'est pas livrée avec un interpréteur par défaut.
Code JavaScript : | Sélectionner tout |
1 2 3 4 | #!/usr/bin/env node // in the Script Goal 'use strict'; console.log(1); |
Code JavaScript : | Sélectionner tout |
1 2 3 4 | #!/usr/bin/env node // in the Module Goal export {}; console.log(1); |
Il existe plusieurs interprètes JS que vous pouvez télécharger dans votre environnement CLI (Node.js est le plus populaire), mais leurs shebangs ne sont pas tous identiques. Il n'est actuellement pas standardisé et varie entre les différents environnements CLI. La grammaire Hashbang proposée vise à fournir un moyen normalisé de gérer les hashbangs, notamment en les supprimant du script avant de le transmettre au moteur JavaScript pour exécution.
Source : ECMAScript 2023 (1, 2)
Et vous ?
Que pensez-vous des fonctionnalités proposées pour la norme ECMAScript 2023 ?
Voir aussi
État de JavaScript 2022 : React reste le framework front-end dominant mais est en perte de vitesse côté satisfaction, JQuery est la troisième bibliothèque la plus utilisée
Microsoft propose d'introduire une syntaxe de type dans JavaScript, notamment le typage des variables et des paramètres
La spécification des nouvelles fonctionnalités de la norme ECMAScript 2021 est terminée, tour d'horizon des nouveautés introduites dans cette nouvelle version