Symbol.iterator
El símbolo conocido como Symbol.iterator
especifica el iterador por defecto para un objeto. Utilizado por for...of
.
Pruébalo
Descripción
Siempre que un objeto necesite ser iterado (como al principio de un bucle for..of
), se llama a su método @@iterator
sin argumentos, y el iterador devuelto se utiliza para obtener los valores a iterar.
Algunos tipos incorporados tienen un comportamiento de iteración por defecto, mientras que otros tipos (como Object
) no lo tienen. Los tipos incorporados con un método @@iterador
son:
Array.prototype[@@iterator]()
TypedArray.prototype[@@iterator]()
String.prototype[@@iterator]()
Map.prototype[@@iterator]()
Set.prototype[@@iterator]()
Véase también Protocolos de iteración para más información.
Atributos de la propiedad Symbol.iterator |
|
---|---|
Sobrescribir | No |
Numerable | No |
Configurable | No |
Ejemplos
Iterables definidos por el usuario
Podemos hacer nuestros propios iterables así:
const myIterable = {};
myIterable[Symbol.iterator] = function* () {
yield 1;
yield 2;
yield 3;
};
[...myIterable]; // [1, 2, 3]
O los iterables pueden ser definidos directamente dentro de una clase u objeto usando una propiedad computada:
class Foo {
*[Symbol.iterator]() {
yield 1;
yield 2;
yield 3;
}
}
const someObj = {
*[Symbol.iterator]() {
yield "a";
yield "b";
},
};
console.log(...new Foo()); // 1, 2, 3
console.log(...someObj); // 'a', 'b'
Iterables formados incorrectamente
Si el método @@iterator
de un iterable no devuelve un objeto iterador, entonces es un iterable formado incorrectamente. Si se utiliza como tal, es probable que se produzcan excepciones en tiempo de ejecución o un comportamiento erróneo:
const nonWellFormedIterable = {}
nonWellFormedIterable[Symbol.iterator] = () => 1
[...nonWellFormedIterable] // TypeError: [] no es una función
Especificaciones
Specification |
---|
ECMAScript Language Specification # sec-symbol.iterator |
Compatibilidad con navegadores
BCD tables only load in the browser