Symbol.iterator

Esta tradução está incompleta. Ajude a traduzir este artigo em inglês

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

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
Writable no
Enumerable no
Configurable no

Exemplos

Iteráveis ​​definidos pelo usuário

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

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:

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:

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

Especificações

Especificação
ECMAScript (ECMA-262)
The definition of 'Symbol.iterator' in that specification.

Compatibilidade de navegador

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
iteratorChrome Full support 43Edge Full support 12Firefox Full support 36IE No support NoOpera Full support 30Safari Full support 10WebView Android Full support 43Chrome Android Full support 43Firefox Android Full support 36Opera Android Full support 30Safari iOS Full support 10Samsung Internet Android Full support 4.0nodejs Full support 0.12

Legend

Full support  
Full support
No support  
No support

Veja também