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的实现方式也类似。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值