【发布时间】:2018-06-20 15:05:41
【问题描述】:
将数组的值恢复为简单的true 或false 值的最佳方法是什么。
我很困惑,因为 jsperf 给我的结果与 google chrome 控制台、nodejs 或任何其他 JS 引擎给我的结果不同。 (jsperf snippet here)
这是代码 sn-p,你可以看到(你可以在这里运行它)some 比使用 foreach 循环快 100 倍
var array = [];
var i = 0;
var flag = false;
while (i< 100000) {
array.push(Math.random()*10000);
i++;
}
console.time('forEach');
array.forEach((item) => {
if (!flag && item > 10000/2) {
flag = true;
return;
}
return false
});
console.timeEnd('forEach');
console.log(flag);
flag = false;
console.time('some');
flag = array.some((item) => {
if (item > 10000/2) {
return true;
}
return false
});
console.timeEnd('some');
console.log(flag);
问题是,为什么 JSPERF 给出的结果与 chrome 的控制台、nodejs 或任何其他 JS 引擎不同?
编辑: 正如我对下面问题的回答所述,这种行为是错误的,因为 我在使用 JSPERF 时打开了 chrome 开发工具,并且所有消息都被记录到控制台,这意味着实际上结果改变了。 请记住,在执行时让控制台保持打开状态时,JSPERF 可能无法正常运行。
【问题讨论】:
-
你可以测量一下你上面代码的执行时间,自己看看:)
标签: javascript arrays performance performance-testing jsperf