--- 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")}}