7.6.0 Released: Accessori statici privati e sintassi intrinsic di V8
Questa pagina è stata tradotta da PageTurner AI (beta). Non ufficialmente approvata dal progetto. Hai trovato un errore? Segnala problema →
Abbiamo appena rilasciato una nuova versione minore di Babel!
Include il supporto per gli accessori statici privati nelle classi e il supporto del parser per la sintassi degli intrinsic di V8. Abbiamo inoltre risolto una serie di problemi di lunga data relativi alla gestione della TDZ e migliorato il supporto per le do-expression. Puoi consultare l'intero changelog su GitHub.
Grazie a Serhii Muryhin, Ashwin Ramaswami, Sungmin Lee, Serge Havas, Ziad El Khoury Hanna, Even Alander, Shrey Banga, Dylan Kirkby, Ajay Sagar, Adam Ramberg e Bin Xin per i loro primi PR! (E un ringraziamento anche a Codetriage README Bot e dependabot 🤖)
Bloomberg continua a sponsorizzare l'implementazione delle nuove funzionalità per le classi in Babel: dopo averci fornito numerose funzionalità (campi privati statici, metodi privati d'istanza, accessori privati d'istanza e metodi privati statici), hanno appena implementato i getter e setter statici privati.
Un altro grande ringraziamento va a Frontend Masters per le due importanti donazioni dello scorso mese, e a tutti gli altri nostri sponsor che permettono al team di Babel di dedicare più tempo al progetto!
Se tu o la tua azienda desiderate supportare Babel e l'evoluzione di JavaScript, ma non siete sicuri su come farlo, potete donare tramite OpenCollective o, ancora meglio, collaborare direttamente con noi all'implementazione di nuove proposte ECMAScript! Essendo un progetto guidato da volontari, contiamo sul supporto della comunità sia per finanziare i nostri sforzi nell'assistere la vasta gamma di utenti JavaScript, sia per assumere la proprietà del codice. Contatta Henry all'indirizzo henry@babeljs.io per maggiori informazioni!
Accessori statici privati (getter e setter) (#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);
}
}
Grazie a Tim (Bloomberg) per aver implementato questa proposta!
Puoi testare questa nuova funzionalità aggiungendo @babel/plugin-proposal-private-methods alla tua configurazione, se non l'hai già fatto, o abilitando il preset stage-3 nel repl online.
Il supporto per le funzionalità private delle classi è finalmente completo 🎉
| 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 |

Analisi delle funzioni runtime intrinseche di V8 (#10148)
Questa è un'estensione non standard del linguaggio, utilizzabile solo in V8 abilitando il flag da riga di comando --allow-natives-syntax.
V8, il motore JavaScript utilizzato da Node.js e browser basati su Chromium, può esporre varie funzionalità interne come funzioni JavaScript. Sebbene queste API non debbano essere usate nel codice JavaScript di produzione, queste funzioni speciali possono risultare utili in scenari di test e debug — ad esempio per comprendere come i valori JavaScript sono rappresentati in memoria o per invocare direttamente routine delle specifiche ECMAScript.
Queste cosiddette "intrinseche V8" hanno una sintassi diversa dalle normali funzioni: il loro nome inizia sempre con %. Inoltre, possono essere chiamate solo direttamente e mai utilizzate come valori ordinari (non è possibile, ad esempio, assegnarle a un'altra variabile).
function fn() { /* ... */ }
const status = %GetOptimizationStatus(fn);
if (status === 2) {
console.log("The function is not optimized!");
}
Puoi trovare l'elenco completo delle intrinseche V8 esistenti nel codice sorgente di V8.
Puoi abilitare questa sintassi in @babel/parser utilizzando il plugin v8intrinsic:
const { parse } = require("@babel/parser");
parse(code, {
plugins: ["v8intrinsic"]
})
Aggiornamenti sull'operatore Nullish coalescing (??) (#10269)
La proposta stage 3 del nullish coalescing ha recentemente ricevuto aggiornamenti: per evitare ambiguità con la precedenza di altri operatori logici (&& e ||), la specifica è stata modificata per vietarne la combinazione diretta.
Ciò significa che le seguenti espressioni ora non sono valide:
a ?? b || c;
a && b ?? c;
Invece, è necessario aggiungere parentesi dove appropriato:
(a ?? b) || c; /* or */ a ?? (b || c);
(a && b) ?? c; /* or */ a && (b ?? c);
Il comportamento è analogo all'interazione tra operatore unario meno (-) e operatore di esponenziazione (**): non è possibile scrivere -1 ** 2, ma bisogna scegliere tra (-1) ** 2 e -(1 ** 2).