javascript - 更高的性能 - Map.prototype.forEach 还是 for..of?

标签 javascript node.js dictionary es6-map

说我有:

const m = new Map();

之间是否存在性能差异:
for(let v of m){

}

对比
m.forEach(v => {});

我假设 Map.protoype.forEach使用迭代器就像 for..of?我在这里读到在迭代过程中使用 for..of 从 map 中删除键是安全的,请参阅:ES6: Is it dangerous to delete elements from Set/Map during Set/Map iteration?

我想知道使用 Map.prototype.forEach 从 map 中删除键是否安全循环也。

最佳答案

我也对此感兴趣并创建了一个 JSPerf benchmark它对 map 执行简单的原始迭代,但不对条目本身做任何事情。

for-of 循​​环如下所示:

for (let entry of testMap) ...

始终将执行速度提高约 15-20% 在 chrome 中,与 forEach 相比,只是迭代整个事物。

如果你需要更好的可读性,循环表达式本身中的数组解构是最慢的,它实际上是在 forEach 级别上执行的:
for (let [key, value] of testMap) ...

使用局部变量介于两者之间,比数组解构快但比原始循环慢:
for (let entry of testMap) {
    let key = entry[0];
    let value = entry[1];
}

此外,for-of 循​​环还有一个额外的好处是不需要创建函数,这意味着在 forEach 时产生的潜在垃圾更少。使用每次调用创建的匿名函数表达式调用。

关于javascript - 更高的性能 - Map.prototype.forEach 还是 for..of?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51391619/

相关文章:

c++ - 了解 Node.js 的 napi_value 类型的定义

c# - 迭代从 JSON 文件生成的动态对象的问题

javascript - Jest + process.env.NODE_ENV 未正确测试

javascript - 表单数据内容类型中未定义的 Node.js req.body

javascript - 如何使用 'toHaveClass' 来匹配 Jest 中的子字符串?

node.js - 使用 MtGox 的流 API 进行身份验证的命令

python - 类型错误 : 'dict' object is not callable

c# - 多值字典?

javascript - 每次用户重新访问页面时,如何在 div 中显示保存在本地存储中的新图像?

javascript - jQuery 计算具有值的输入字段的数量