Aller au contenu principal

@babel/plugin-transform-for-of

Traduction Bêta Non Officielle

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 →

info

Ce plugin est inclus dans @babel/preset-env

Exemple

Entrée

JavaScript
for (var i of foo) {
}

Sortie

JavaScript
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 install --save-dev @babel/plugin-transform-for-of

Utilisation

Avec un fichier de configuration (Recommandé)

Sans options :

JavaScript
{
"plugins": ["@babel/plugin-transform-for-of"]
}

Avec options :

JavaScript
{
"plugins": [
["@babel/plugin-transform-for-of", {
"loose": true, // defaults to false
"assumeArray": true // defaults to false
}]
]
}

Via CLI

Shell
babel --plugins @babel/plugin-transform-for-of script.js

Via l'API Node

JavaScript
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.

attention

Envisagez de migrer vers l'hypothèse de niveau supérieur skipForOfIteratorClosing.

babel.config.json
{
"assumptions": {
"skipForOfIteratorClosing": true
}
}

Tous les autres itérables continueront de fonctionner correctement.

Exemple

Entrée

JavaScript
for (var i of foo) {
}

Sortie

JavaScript
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

JavaScript
for (let a of [1, 2, 3]) {
}

Sortie

JavaScript
var _arr = [1, 2, 3];
for (var _i = 0; _i < _arr.length; _i++) {
var a = _arr[_i];
}
astuce

Vous pouvez en savoir plus sur la configuration des options de plugin ici