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
.
Attributs de Symbol.iterator |
|
---|---|
Écrivable | Non |
Énumérable | Non |
Configurable | Non |
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.
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]
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 2017 Draft (ECMA-262) La définition de 'Symbol.iterator' dans cette spécification. |
Projet |
Compatibilité des navigateurs
Fonctionnalité | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Support simple | 43 | 36 (36) | Pas de support | 30 | 10 |
Fonctionnalité | Android | Chrome pour Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Support simple | Pas de support | Pas de support | 36.0 (36) | Pas de support | Pas de support | Pas de support |