@babel/plugin-transform-for-of
Questa pagina è stata tradotta da PageTurner AI (beta). Non ufficialmente approvata dal progetto. Hai trovato un errore? Segnala problema →
Questo plugin è incluso in @babel/preset-env
Esempio
In
for (var i of foo) {
}
Out
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (
var _iterator = foo[Symbol.iterator](), _step;
!(_iteratorNormalCompletion = (_step = _iterator.next()).done);
_iteratorNormalCompletion = true
) {
var i = _step.value;
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return != null) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
Installazione
- npm
- Yarn
- pnpm
- Bun
npm install --save-dev @babel/plugin-transform-for-of
yarn add --dev @babel/plugin-transform-for-of
pnpm add --save-dev @babel/plugin-transform-for-of
bun add --dev @babel/plugin-transform-for-of
Utilizzo
Con un file di configurazione (Consigliato)
Senza opzioni:
{
"plugins": ["@babel/plugin-transform-for-of"]
}
Con opzioni:
{
"plugins": [
["@babel/plugin-transform-for-of", {
"loose": true, // defaults to false
"assumeArray": true // defaults to false
}]
]
}
Tramite CLI
babel --plugins @babel/plugin-transform-for-of script.js
Tramite Node API
require("@babel/core").transformSync("code", {
plugins: ["@babel/plugin-transform-for-of"],
});
Opzioni
loose
boolean, predefinito false
In modalità loose, gli array vengono inseriti in un percorso ottimizzato, aumentando significativamente le prestazioni.
Considera di migrare all'assunzione di primo livello skipForOfIteratorClosing.
{
"assumptions": {
"skipForOfIteratorClosing": true
}
}
Tutti gli altri iterabili continueranno a funzionare correttamente.
Esempio
In
for (var i of foo) {
}
Out
for (
var _iterator = foo,
_isArray = Array.isArray(_iterator),
_i = 0,
_iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();
;
) {
var _ref;
if (_isArray) {
if (_i >= _iterator.length) break;
_ref = _iterator[_i++];
} else {
_i = _iterator.next();
if (_i.done) break;
_ref = _i.value;
}
var i = _ref;
}
Completamenti anomali
Sotto l'assunzione skipForOfIteratorClosing, il metodo return di un iteratore non verrà chiamato in caso di completamenti anomali causati da errori lanciati.
Per maggiori informazioni, consulta google/traceur-compiler#1773 e babel/babel#838.
allowArrayLike
boolean, predefinito false
Aggiunto in: v7.10.0
Questa opzione consente di utilizzare il ciclo for-of con oggetti array-like.
Un oggetto array-like è un oggetto con una proprietà length: ad esempio { 0: "a", 1: "b", length: 2 }. Nota che, come gli array veri, gli oggetti array-like possono avere "buchi": { 1: "a", length: 3 } equivale a [ (hole), "a", (hole) ].
Sebbene non sia conforme alle specifiche iterare oggetti array-like come se fossero array, molti oggetti sarebbero iterabili nei browser moderni con supporto a Symbol.iterator. Alcuni esempi notevoli sono le collezioni DOM, come document.querySelectorAll("img.big"), che rappresentano il caso d'uso principale per questa opzione.
Nota che Babel consente di iterare arguments nei motori legacy anche quando questa opzione è disabilitata, poiché è definito come iterabile nella specifica ECMAScript.
assumeArray
boolean, predefinito false
Applica l'ottimizzazione descritta di seguito a tutti i cicli for-of assumendo che tutti siano array.
Utile quando si desidera che un ciclo for-of rappresenti un semplice ciclo for su un array.
Ottimizzazione
Se viene utilizzato un array semplice, Babel compilerà il ciclo for-of in un normale ciclo for.
In
for (let a of [1, 2, 3]) {
}
Out
var _arr = [1, 2, 3];
for (var _i = 0; _i < _arr.length; _i++) {
var a = _arr[_i];
}
Maggiori informazioni sulla configurazione delle opzioni del plugin sono disponibili qui