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:

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í:

js
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:

js
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:

js
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

Véase también