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 September 2015.
O símbolo conhecido Symbol.iterator
especifíca o iterador padrão para um objeto. Usado por for...of
.
Experimente
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:
Array.prototype[@@iterator]()
TypedArray.prototype[@@iterator]()
String.prototype[@@iterator]()
Map.prototype[@@iterator]()
Set.prototype[@@iterator]()
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
Specification |
---|
ECMAScript Language Specification # sec-symbol.iterator |
Compatibilidade com navegadores
BCD tables only load in the browser