@babel/plugin-transform-for-of
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 →
Ce plugin est inclus dans @babel/preset-env
Exemple
Entrée
for (var i of foo) {
}
Sortie
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;
}
}
}
Installation
- 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
Utilisation
Avec un fichier de configuration (Recommandé)
Sans options :
{
"plugins": ["@babel/plugin-transform-for-of"]
}
Avec options :
{
"plugins": [
["@babel/plugin-transform-for-of", {
"loose": true, // defaults to false
"assumeArray": true // defaults to false
}]
]
}
Via CLI
babel --plugins @babel/plugin-transform-for-of script.js
Via l'API Node
require("@babel/core").transformSync("code", {
plugins: ["@babel/plugin-transform-for-of"],
});
Options
loose
boolean, valeur par défaut : false
En mode loose, les tableaux sont traités dans un chemin rapide, augmentant ainsi considérablement les performances.
Envisagez de migrer vers l'hypothèse de niveau supérieur skipForOfIteratorClosing.
{
"assumptions": {
"skipForOfIteratorClosing": true
}
}
Tous les autres itérables continueront de fonctionner correctement.
Exemple
Entrée
for (var i of foo) {
}
Sortie
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;
}
Terminaisons abruptes
Sous l'hypothèse skipForOfIteratorClosing, la méthode return d'un itérateur ne sera pas appelée lors de terminaisons abruptes causées par des erreurs levées.
Veuillez consulter google/traceur-compiler#1773 et babel/babel#838 pour plus d'informations.
allowArrayLike
boolean, valeur par défaut : false
Ajouté dans : v7.10.0
Cette option permet d'utiliser for-of avec des objets de type tableau.
Un objet semblable à un tableau est un objet possédant une propriété length : par exemple, { 0: "a", 1: "b", length: 2 }. Notez que, comme les vrais tableaux, ces objets peuvent avoir des "trous" : { 1: "a", length: 3 } est équivalent à [ (hole), "a", (hole) ].
Bien qu'il ne soit pas conforme aux spécifications d'itérer des objets de type tableau comme s'ils étaient des tableaux, de nombreux objets seraient des itérables dans les navigateurs modernes avec support de Symbol.iterator. Parmi les exemples notables figurent les collections DOM, comme document.querySelectorAll("img.big"), qui constituent le principal cas d'usage de cette option.
Notez que Babel permet d'itérer arguments sur les anciens moteurs même si cette option est désactivée, car il est défini comme itérable dans la spécification ECMAScript.
assumeArray
boolean, valeur par défaut : false
Cette option applique l'optimisation ci-dessous à toutes les boucles for-of en supposant que toutes les boucles traitent des tableaux.
Peut être utile lorsque vous souhaitez simplement qu'une boucle for-of représente une boucle for basique sur un tableau.
Optimisation
Si un tableau basique est utilisé, Babel compilera la boucle for-of en une boucle for classique.
Entrée
for (let a of [1, 2, 3]) {
}
Sortie
var _arr = [1, 2, 3];
for (var _i = 0; _i < _arr.length; _i++) {
var a = _arr[_i];
}
Vous pouvez en savoir plus sur la configuration des options de plugin ici