引用文章,很好的分析了for()遍历。它同时也针对for()遍历和.forEach()做了比对测试。
for()与.forEach()及.map()相比会消耗更多的内存。
1、.map()和.forEach()和for()----可读性及内存
例如:
var arr = [1, 2, 3];
.map():
arr.map(fcuntion(i) { console.log(i);})
43个字母
.forEach():
arr.forEach(function(i){ console.log(i)})
47个字母
for()
for(var i=0,l=arr.lengrh;i<l; i++) { console.log(i);}
70个字母
.map()和.forEach()明显要简短一些,并且他们的可读性更强,同时他们也创建了各自的scope,
而for()在执行完遍历之后会把i和l这两个元素挂起来,这让我们需要手动增加一些代码去清除他们所占用的内存。而且每次遍历秀需要计算数组的长度,这样会有性能损耗。
使用.forEach()或者.map()会更好一些
.map() vs .forEach()
1、.map()要比.forEach()执行速度更快。虽然我也说过执行速度不是我们需要考虑的主要因素,但是他们都比for()
要更好用,那肯定要选更优化的一个。
2、.forEach()的返回值并不是array。如果想用函数式编程写个链式表达式只能使用.map()。
例如:
var arr = [1, 2, 3];
//1.链式风格
console.log( arr.map(function(i){ return i+i; }) .sort());
// [2,4,6]
//2.报错
console.log( arr.forEach(function(i){ return i+i; }) .sort());
//TypeError: Cannot read property 'sort' of undefined
排个序
.map() > .forEach() > for()