--- 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 ---
El símbolo Symbol.iterator
especifica al iterador por defecto de un objeto. Es utilizado por el bucle {{jsxref("Sentencias/for","for")}}.
El código fuente de este ejemplo interactivo está guardado en un repositorio en GitHub. Si quieres contribuir al proyecto de ejemplos interactivos, por favor clona https://github.com/mdn/interactive-examples y envía un pull request.
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.
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]
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
Especificaciób | Estado | Comentario |
---|---|---|
{{SpecName('ES2015', '#sec-symbol.iterator', 'Symbol.iterator')}} | {{Spec2('ES2015')}} | Initial definition. |
{{SpecName('ESDraft', '#sec-symbol.iterator', 'Symbol.iterator')}} | {{Spec2('ESDraft')}} |
{{Compat("javascript.builtins.Symbol.iterator")}}