--- title: Symbol.iterator slug: Web/JavaScript/Reference/Global_Objects/Symbol/iterator tags: - ECMAScript6 - JavaScript - Property - Symbol translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/iterator original_slug: Web/JavaScript/Referencia/Objetos_globales/Symbol/iterator ---
{{JSRef}}

El símbolo Symbol.iterator especifica al iterador por defecto de un objeto. Es utilizado por el bucle {{jsxref("Sentencias/for","for")}}.

{{EmbedInteractiveExample("pages/js/symbol-iterator.html")}}
{{js_property_attributes(0,0,0)}}

Descripción

En cualquier situación donde se necesita iterar un objeto (por ejemplo al inicio de un bucle for..of), su método @@iterator es invocado sin argumentos, y el iterador regresado es utilizador para obtener los valores a iterar.

Algunos tipos integrados cuentan con un comportamiento de iterar por defecto, mientras que otros tipos (como {{jsxref("Object")}}) no. Los tipos integrados con un método @@iterator son:

Ver Protocolos de iteración para más información.

Ejemplos

Iterables definidos por el usuario

Podemos definir nuestros propios iterables de la siguiente forma:

var myIterable = {}
myIterable[Symbol.iterator] = function* () {
    yield 1;
    yield 2;
    yield 3;
};
[...myIterable] // [1, 2, 3]

Iterables mal formados

Si un método iterador @@iterator no devuelve un objeto iterador, es un iterable mal formado. Usarlo como tal es probable que genere excepciones en tiempo de ejecución, o comportamientos inesperados.

var nonWellFormedIterable = {}
nonWellFormedIterable[Symbol.iterator] = () => 1
[...nonWellFormedIterable] // TypeError: [] is not a function

Especificaciones

Especificaciób Estado Comentario
{{SpecName('ES2015', '#sec-symbol.iterator', 'Symbol.iterator')}} {{Spec2('ES2015')}} Initial definition.
{{SpecName('ESDraft', '#sec-symbol.iterator', 'Symbol.iterator')}} {{Spec2('ESDraft')}}

Compatibilidad en navegadores

{{Compat("javascript.builtins.Symbol.iterator")}}

Temas relacionados