Como o loop `for..of` resolve o iterador de um objeto?

Para que um objeto implemente interface iterável, ele deve implementar[Symbol.iterator] tecla que aponta para uma função que retorna oiterator. Eu estou querendo saber se ofor..of loop internamente chama esse método em um objeto para obter esseiterator?

A razão pela qual estou curioso é que, por exemplo,Map define uma interface com vários iteradores (entradas, valores, chaves) e parece que se não for especificado explicitamente ofor..of loop usa o iterador retornado pormap.entries() ligar.

Estou tentando pesquisarna especificação mas apenas especifica queiterator é passado como um parâmetro para a operação abstrataForOf:

A operação abstrata ForIn / OfBodyEvaluation é chamada com argumentos lhs, stmt,iterador, iterationKind, lhsKind e labelSet.

Então, basicamente, duas perguntas:

Como o iterador é obtido de um objeto?Onde é especificado na especificação?

questionAnswers(2)

yourAnswerToTheQuestion