Насколько я знаю, коллекция Map является итерируемым объектом. Т.е. тем объектом, у которого "под капотом" есть ф-ция
[Symbol.iterator]
. У этой ф-ции в свою очередь есть возвращаемый объект-итератор, который содержит метод
next()
. Благодаря этому происходит перебор эл-тов в цикле
for..of
. Например:
let map = new Map([
['йогурт', 300],
['морковь', 10],
['творог', 300]
]);
for(let value of map) {
console.log(value); //['йогурт', 300], ['морковь', 10], ['творог', 300]
}
Почему тогда во втором случае не происходит запуска
next()
?
const map1 = new Map(
['0', 'foo'],
[1, 'bar']
);
const iterator1 = map1.entries();
//Первый случай
console.log(iterator1.next().value); //['0', 'foo']
console.log(iterator1.next().value); //[1, 'bar']
//Второй случай
console.log(map1.next().value); //map1.next is not a function
Чем отличается оригинальный объект Map от того, что возвращает встроенный метод entries()
?