Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

Array : méthode [Symbol.iterator]()

Baseline Widely available

Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis ⁨septembre 2016⁩.

La méthode [Symbol.iterator]() des instances de Array implémente le protocole itérable et permet aux tableaux d'être parcourus par la plupart des syntaxes qui attendent un itérable, comme la syntaxe de l'opérateur de propagation et les boucles for...of. Elle retourne un objet itérateur de tableau qui fournit la valeur de chaque indice du tableau.

La valeur initiale de cette propriété est la même fonction que la valeur initiale de la propriété Array.prototype.values.

Exemple interactif

const array = ["a", "b", "c"];
const iterator = array[Symbol.iterator]();

for (const value of iterator) {
  console.log(value);
}

// Résultat attendu : "a"
// Résultat attendu : "b"
// Résultat attendu : "c"

Syntaxe

js
array[Symbol.iterator]()

Paramètres

Aucun.

Valeur de retour

La même valeur de retour que Array.prototype.values() : un nouvel objet d'itérateur itérable qui fournit la valeur de chaque indice du tableau.

Exemples

Itération avec une boucle for...of

Notez qu'il est rare d'avoir à appeler cette méthode directement. La présence de la méthode [Symbol.iterator]() rend les tableaux itérables, et les syntaxes d'itération comme la boucle for...of appellent automatiquement cette méthode pour obtenir l'itérateur à parcourir.

HTML

html
<ul id="letterResult"></ul>

JavaScript

js
const arr = ["a", "b", "c"];
const letterResult = document.getElementById("letterResult");
for (const letter of arr) {
  const li = document.createElement("li");
  li.textContent = letter;
  letterResult.appendChild(li);
}

Résultat

Utiliser manuellement l'itérateur

Vous pouvez toujours appeler manuellement la méthode next() de l'objet itérateur retourné pour avoir un contrôle maximal sur le processus d'itération.

js
const arr = ["a", "b", "c", "d", "e"];
const arrIter = arr[Symbol.iterator]();
console.log(arrIter.next().value); // a
console.log(arrIter.next().value); // b
console.log(arrIter.next().value); // c
console.log(arrIter.next().value); // d
console.log(arrIter.next().value); // e

Gérer les chaînes de caractères et les tableaux de chaînes avec la même fonction

Puisque les chaînes de caractères et les tableaux implémentent le protocole itérable, il est possible de concevoir une fonction générique pour traiter les deux types d'entrée de la même manière. Cela est préférable à l'appel direct de Array.prototype.values(), qui nécessite que l'entrée soit un tableau ou au moins un objet possédant cette méthode.

js
function logIterable(it) {
  if (typeof it[Symbol.iterator] !== "function") {
    console.log(it, "n'est pas itérable.");
    return;
  }
  for (const letter of it) {
    console.log(letter);
  }
}

// Tableau
logIterable(["a", "b", "c"]);
// a
// b
// c

// Chaîne de caractères
logIterable("abc");
// a
// b
// c

// Nombre
logIterable(123);
// 123 n'est pas itérable.

Spécifications

Specification
ECMAScript® 2026 Language Specification
# sec-array.prototype-%symbol.iterator%

Compatibilité des navigateurs

Voir aussi