Version 7.6.0 : Accesseurs statiques privés et syntaxe intrinsèque V8
Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →
Nous venons de publier une nouvelle version mineure de Babel !
Elle inclut le support des accesseurs statiques privés dans les classes et la prise en charge par le parseur de la syntaxe intrinsèque V8. Nous avons également corrigé plusieurs problèmes de longue date liés à la gestion de la TDZ (Temporal Dead Zone) et amélioré le support des do-expressions. Vous pouvez consulter l'intégralité du changelog sur GitHub.
Merci à Serhii Muryhin, Ashwin Ramaswami, Sungmin Lee, Serge Havas, Ziad El Khoury Hanna, Even Alander, Shrey Banga, Dylan Kirkby, Ajay Sagar, Adam Ramberg et Bin Xin pour leurs premières contributions (PR) ! (Et merci également à Codetriage README Bot et dependabot 🤖)
Bloomberg continue de sponsoriser l'implémentation des nouvelles fonctionnalités de classes dans Babel : après nous avoir offert de nombreuses fonctionnalités (champs statiques privés, méthodes d'instance privées, accesseurs d'instance privés et méthodes statiques privées), ils viennent d'implémenter les accesseurs statiques privés (getters et setters).
Un grand merci également à Frontend Masters pour deux dons importants ce mois-ci, ainsi qu'à tous nos autres sponsors qui permettent à l'équipe Babel de consacrer plus de temps au projet !
Si vous ou votre entreprise souhaitez soutenir Babel et l'évolution de JavaScript mais ne savez pas comment procéder, vous pouvez nous faire un don sur OpenCollective et, mieux encore, travailler directement avec nous sur l'implémentation des nouvelles propositions ECMAScript ! En tant que projet porté par des bénévoles, nous comptons sur le soutien de la communauté pour financer nos efforts visant à prendre en charge la large gamme d'utilisateurs JavaScript et à assumer la propriété du code. Contactez Henry à l'adresse henry@babeljs.io si vous souhaitez en discuter !
Accesseurs statiques privés (getters et setters) (#10217)
class Resource {
static #loaderInstance = null;
static get #loader() {
if (!this.#loaderInstance) this.#loaderInstance = new Loader();
return this.#loaderInstance;
}
status = null;
constructor(url) {
this.status = Resource.#loader.load(url);
}
}
Merci à Tim (Bloomberg) pour l'implémentation de cette proposition !
Vous pouvez tester cette nouvelle fonctionnalité en ajoutant @babel/plugin-proposal-private-methods à votre configuration si ce n'est déjà fait, ou en activant le preset stage-3 dans le REPL en ligne.
La prise en charge des fonctionnalités privées des classes est enfin complète 🎉
| Class Private | Instance | Static |
|---|---|---|
Fields class A { #a = 1 } | 7.0.0 | 7.1.0 |
Methods class A { #a() {} } | 7.2.0 | 7.4.0 |
Accessors class A { get #a() {} } | 7.3.0 | 7.6.0 |

Analyse des fonctions d'exécution intrinsèques V8 (#10148)
Il s'agit d'une extension non standard du langage, utilisable uniquement dans V8 en activant le drapeau --allow-natives-syntax en ligne de commande.
V8, le moteur JavaScript utilisé par Node.js et les navigateurs basés sur Chromium, expose diverses fonctionnalités internes sous forme de fonctions JavaScript. Bien que ces API ne doivent pas être utilisées en production, ces fonctions spéciales peuvent s'avérer utiles pour les tests et le débogage — par exemple pour comprendre la représentation mémoire de vos valeurs JavaScript ou appeler directement certaines routines de la spécification ECMAScript.
Ces fonctions dites « intrinsèques V8 » ont une syntaxe différente des fonctions normales : leur nom commence toujours par %. De plus, elles ne peuvent être appelées directement et ne doivent jamais être utilisées comme valeurs ordinaires (par exemple, vous ne pouvez pas les assigner à une autre variable).
function fn() { /* ... */ }
const status = %GetOptimizationStatus(fn);
if (status === 2) {
console.log("The function is not optimized!");
}
Vous trouverez la liste complète des intrinsèques V8 existantes dans le code source de V8.
Vous pouvez activer cette syntaxe dans @babel/parser via le plugin v8intrinsic :
const { parse } = require("@babel/parser");
parse(code, {
plugins: ["v8intrinsic"]
})
Mises à jour de l'opérateur de coalescence des nuls (??) (#10269)
La proposition de coalescence des nuls (stage 3) a récemment évolué : pour éviter les confusions de priorité avec les autres opérateurs logiques (&& et ||), la spécification interdit désormais leur mélange.
Les expressions suivantes deviennent donc invalides :
a ?? b || c;
a && b ?? c;
Ajoutez plutôt des parenthèses aux endroits appropriés :
(a ?? b) || c; /* or */ a ?? (b || c);
(a && b) ?? c; /* or */ a && (b ?? c);
Cela est comparable à l'interaction entre le moins unaire (-) et l'opérateur d'exponentiation (**) : vous ne pouvez pas écrire -1 ** 2, mais devez choisir entre (-1) ** 2 et -(1 ** 2).