直接迭代Map 和通过entries() 返回的迭代器迭代有区别吗?

v-m*_*moe 2 javascript es6-map

如果我有MapJavaScript,例如

const myMap = new Map()
myMap.set(0, 'zero')
myMap.set(1, 'one')
Run Code Online (Sandbox Code Playgroud)

那么这两个似乎都可以有效地遍历键值对(以及我目前不感兴趣的许多其他选项):

// with .entries()
for (const [key, value] of myMap.entries()) {
  //
}
// without
for (const [key, value] of myMap) {
  //
}
Run Code Online (Sandbox Code Playgroud)

是否存在他们不做同样事情的边缘情况?

T.J*_*der 7

\n

是否存在他们不做同样事情的边缘情况?

\n
\n

不会。您从中获取的迭代器对象与entries映射本身提供的迭代器对象完全相同。事实上,someMap[Symbol.iterator](当您向对象询问其迭代器时调用的函数)实际上与以下函数完全相同someMap.entries

\n

\r\n
\r\n
const someMap = new Map();\nconsole.log(someMap[Symbol.iterator] === someMap.entries);
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n

在规范中:

\n\n