for循环和forEach的速度问题

for循环是比较古老的循环方式,不少人对他的写法已经觉得厌烦,随着js的发展越来越多的遍历方式逐一诞生: forEach, map, filter,every,some,for of等等,简洁的语法让人赏心悦目。

forEach代码实现:

if (!Array.prototype.forEach)
{
          
   
  Array.prototype.forEach = function(fun /*, thisArg */)
  {
          
   
    "use strict";

    if (this === void 0 || this === null)
      throw new TypeError();

    var t = Object(this);
    var len = t.length >>> 0;
    if (typeof fun !== "function")
      throw new TypeError();

    var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
    for (var i = 0; i < len; i++)
    {
          
   
      if (i in t)
        fun.call(thisArg, t[i], i, t);
    }
  };
}
看看代码就知道了,forEach的内部实现方式也是通过for循环,加上一连串的判断怎么想想都不会觉得比单纯的for循环来的快吧!? 首先call调用比直接运行func的成本高, in检测指定的属性是否在指定的对象或其原型链中,成本也可想而知,forEach自然没有比常规for循环快的道理。 再者forEach是整个数组遍历,在针对某个元素操作时候,for循环的break可以提高运行效率。
const names = [lilei, hanmei, dave]
for (let i = 0; i < names.length; i++) {
          
   
	if (names[i] === hanmei) {
          
   
		console.log(对hanmei进行操作)
		break
	}
}
names.forEach(name => {
          
   
	if(name === hanmei) {
          
   
		console.log(对hanmei进行操作)
	}
})

同理map的实现方式也类似。

经验分享 程序员 微信小程序 职场和发展