请注意以下简单的JavaScript代码:
var values = [];
var len = 1000000;
var sum1 = 0;
var sum2 = 0;
for (var i = 0; i < len; ++i) { values[i] = Math.random(); }
var ts1 = new Date();
for (var i = 0; i < len; ++i) { sum1 += values[i]; }
var ts2 = new Date();
values.forEach(function (val) { sum2 += val; });
var ts3 = new Date();
console.log(ts1, ts2, ts3);
console.log('for loop: ', ts2-ts1);
console.log('forEach: ', ts3-ts2);
运行此代码时,我希望forEach
版本比plain for循环快得多,因为据我所知,JavaScript数组不是数组,而是哈希表。因此,使用for循环迭代1,000,000次意味着在哈希表中执行1,000,000次查找。此外,数字索引需要转换为字符串,因为哈希表键是字符串,对吗?
实际上,在大多数情况下,for循环运行速度要快一些。在任何情况下,差异都是微不足道的。
那么,我错过了什么? for循环如何快速甚至更快?
编辑1
这不是某些实际应用程序性能测试的一部分。我只是好奇。 Douglas Crockford在JavaScript讲座中声称JavaScript在调用函数方面非常有效,我认为他声称forEach
应该比for循环更快,因为前者在浏览器中将迭代实现为本机代码,而后者执行哈希表查找。