说我有:
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/