考虑到代码少简洁,我常常用forEach,在我的猜想里我觉得forEach要耗性能。今天查看了这方面的知识,以后还是多用for少用forEach(如果for能做到的话),
for 循环没有任何额外的函数调用栈和上下文;
forEach函数签名实际上是 array.forEach(function(currentValue, index, arr), thisValue)
它不是普通的 for 循环的语法糖,还有诸多参数和上下文需要在执行的时候考虑进来,这里可能拖慢性能
但 在node.js运行环境下,有一个惊人的发现
let arrs = new Array(100000);
console.time('for');
for (let i = 0; i < arrs.length; i++) {
};
console.timeEnd('for');
console.time('forEach');
arrs.forEach((arr) => {
});
console.timeEnd('forEach');
for: 2.263ms
forEach: 0.254ms
在10万这个级别下, forEach 的性能是 for的十倍
for: 2.263ms
forEach: 0.254ms
在100万这个量级下, forEach 的性能是和for的一致
for: 2.844ms
forEach: 2.652ms
在1000万级以上的量级上 , forEach 的性能远远低于for的性能
for: 8.422ms
forEach: 30.328m
对于小少数据,可以选forEach也可以选for ,对于极大超大的,还是乖乖用for好了。
PS:
看到过一个说法,forEach能让代码更为简便和可读性更高,在性能不是特别影响的前提下,代码的可拓展性,可读性等会更为重要,而且随着浏览器引擎的升级,应该forEach的性能会被优化的越来越棒的