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.

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 :

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 Latest Draft (ECMA-262)
La définition de 'Symbol.iterator' dans cette spécification.
Projet

Compatibilité des navigateurs

Update compatibility data on GitHub
OrdinateurMobileServeur
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebview AndroidChrome pour AndroidFirefox pour AndroidOpera pour AndroidSafari sur iOSSamsung InternetNode.js
iteratorChrome Support complet 43Edge Support complet 12Firefox Support complet 36IE Aucun support NonOpera Support complet 30Safari Support complet 10WebView Android Support complet 43Chrome Android Support complet 43Firefox Android Support complet 36Opera Android Support complet OuiSafari iOS Support complet 10Samsung Internet Android Support complet 4.0nodejs Support complet 0.12

Légende

Support complet  
Support complet
Aucun support  
Aucun support

Voir aussi