Symbol.iterator
Le symbole Symbol.iterator définit l'itérateur par défaut d'un objet. C'est l'itérateur qui sera utilisé par for...of.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Le code source de cet exemple interactif est disponible dans un dépôt GitHub. Si vous souhaitez contribuez à ces exemples, n'hésitez pas à cloner https://github.com/mdn/interactive-examples et à envoyer une pull request !
Description
Lorsqu'on doit itérer sur un objet (par exemple avec une boucle for..of), sa méthode @@iterator est appelée sans argument et l'itérateur renvoyé par la méthode est utilisé pour récupérer les valeurs sur lesquelles itérer.
Certains types natifs possèdent un comportement par défaut pour l'itération, d'autres types (tels qu'Object) n'ont pas de tel comportement. Les types natifs qui disposent d'une méthode @@iterator sont :
Array.prototype[@@iterator]()TypedArray.prototype[@@iterator]()String.prototype[@@iterator]()Map.prototype[@@iterator]()Set.prototype[@@iterator]()
Pour plus d'informations, voir aussi la page sur les protocoles d'itération.
Attributs de Symbol.iterator |
|
|---|---|
| Écrivable | Non |
| Énumérable | Non |
| Configurable | Non |
Exemples
Itérables définis par l'utilisateur
Il est possible de construire un itérable de la façon suivante :
var monItérable = {}
monItérable[Symbol.iterator] = function* () {
yield 1;
yield 2;
yield 3;
};
[...monItérable] // [1, 2, 3]
On peut également définir ces itérables via des propriétés calculées dans des déclarations de classe ou dans des littéraux objets :
class Toto {
*[Symbol.iterator] () {
yield 1;
yield 2;
yield 3;
}
}
const monObj = {
*[Symbol.iterator] () {
yield "a";
yield "b";
}
}
[... new Toto] // [1, 2, 3]
[... monObj] // ["a", "b"]
Itérables mal-formés
Si la méthode @@iterator d'un itérable ne renvoie pas un itérateur, on dira que c'est un itérable mal-formé. Utiliser un tel itérable peut provoquer des erreurs lors de l'exécution :
var itérableMalFormé = {}
itérableMalFormé[Symbol.iterator] = () => 1
[...itérableMalFormé] // TypeError: [] is not a function
Spécifications
| Spécification | État | Commentaires |
|---|---|---|
| ECMAScript 2015 (6th Edition, ECMA-262) La définition de 'Symbol.iterator' dans cette spécification. |
Standard | Définition initiale. |
| ECMAScript (ECMA-262) La définition de 'Symbol.iterator' dans cette spécification. |
Standard évolutif |
Compatibilité des navigateurs
BCD tables only load in the browser