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.
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