--- title: Symbol.iterator slug: Web/JavaScript/Reference/Global_Objects/Symbol/iterator translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/iterator ---
O símbolo conhecido Symbol.iterator
especifíca o iterador padrão para um objeto. Usado por for...of
.
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 {{jsxref("Object")}}) não tem. O tipo built-in com um método @@iterator
são:
Veja também Iteration protocols para mais informação.
{{js_property_attributes(0,0,0)}}
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' ]
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ção |
---|
{{SpecName('ESDraft', '#sec-symbol.iterator', 'Symbol.iterator')}} |
{{Compat("javascript.builtins.Symbol.iterator")}}