Esta página foi traduzida do inglês pela comunidade. Saiba mais e junte-se à comunidade MDN Web Docs.

View in English Always switch to English

Symbol.iterator

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨setembro de 2016⁩.

O símbolo conhecido Symbol.iterator especifíca o iterador padrão para um objeto. Usado por for...of.

Experimente

const iterable1 = {};

iterable1[Symbol.iterator] = function* () {
  yield 1;
  yield 2;
  yield 3;
};

console.log([...iterable1]);
// Expected output: Array [1, 2, 3]

Descrição

Sempre que um objeto precisa ser iterado (como um começo de um for..of loop), o método @@iterator é chamado sem argumentos, e o iterador retornado é usado para obter os valores para serem iterados.

Alguns tipos built-in tem um comportamento padrão de iteração, enquanto outros tipos (assim como Object) não tem. O tipo built-in com um método @@iterator são:

Veja também Iteration protocols para mais informação.

Property attributes of Symbol.iterator
Writableno
Enumerableno
Configurableno

Exemplos

Iteráveis definidos pelo usuário

Podemos fazer nosso próprio iterável dessa forma:

js
var myIterable = {};
myIterable[Symbol.iterator] = function* () {
  yield 1;
  yield 2;
  yield 3;
};
[...myIterable]; // [1, 2, 3]

Ou iteráveis podem ser definidos diretamente dentro de uma classe ou um objeto usando computed property:

js
class Foo {
  *[Symbol.iterator] () {
    yield 1;
    yield 2;
    yield 3;
  }
}

const someObj = {
  *[Symbol.iterator] () {
    yield 'a';
    yield 'b';
  }
}

[...new Foo] // [ 1, 2, 3 ]
[...someObj] // [ 'a', 'b' ]

Iteráveis não bem formados

Se um método @@iterator não retornar um objeto iterador, então é um iterável não bem formado. Usando dessa forma é resultará em uma excessão de tempo ou comportamentos com erros:

js
var nonWellFormedIterable = {}
nonWellFormedIterable[Symbol.iterator] = () => 1
[...nonWellFormedIterable] // TypeError: [] is not a function

Especificações

Specification
ECMAScript® 2026 Language Specification
# sec-symbol.iterator

Compatibilidade com navegadores

Veja também