El s铆mbolo Symbol.iterator
especifica al iterador por defecto de un objeto. Es utilizado por el bucle 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.
Atributos de la propiedad Symbol.iterator |
|
---|---|
Sobrescribir | No |
Numerable | No |
Configurable | No |
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 Object
) no. Los tipos integrados con un m茅todo @@iterator
son:
Array.prototype[@@iterator]()
TypedArray.prototype[@@iterator]()
String.prototype[@@iterator]()
Map.prototype[@@iterator]()
Set.prototype[@@iterator]()
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 |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) La definici贸n de 'Symbol.iterator' en esta especificaci贸n. |
Standard | Initial definition. |
ECMAScript (ECMA-262) La definici贸n de 'Symbol.iterator' en esta especificaci贸n. |
Living Standard |
Compatibilidad en navegadores
BCD tables only load in the browser