¿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?

Respuestas a la pregunta(2)

Su respuesta a la pregunta