¿Cómo el bucle `for..of` resuelve el iterador de un objeto?
Para que un objeto implemente una interfaz iterable, debe implementar[Symbol.iterator]
clave que apunta a una función que devuelve eliterator
. Me pregunto si elfor..of
loop internamente llama a este método en un objeto para obtener eseiterator
?
La razón por la que tengo curiosidad es que, por ejemplo,Map
define una interfaz con varios iteradores (entradas, valores, claves) y parece que si no se especifica explícitamentefor..of
el bucle utiliza el iterador devuelto pormap.entries()
llamada.
He intentado buscaren la especificación pero solo especifica queiterator
se pasa como parámetro a la operación abstractaForOf
:
La operación abstracta ForIn / OfBodyEvaluation se llama con argumentos lhs, stmt,iterador, iterationKind, lhsKind y labelSet.
Entonces básicamente dos preguntas:
¿Cómo se obtiene el iterador de un objeto?¿Dónde se especifica en la especificación?