使用for和forEach遍历数组哪个更快?

b5662d98da903fe379443299bac5330f.jpeg

前言

for语句和forEach()方法相信学习前端的朋友并不陌生,但我们在面试的时候,你能回答面试官的这个问题吗? 接下来,就一起来验证一下吧!

要知道哪个更快,首先我们需要了解这两者是如何使用的。

1.for

for 语句用于创建一个循环,该循环由括在括号中并用分号分隔的三个可选表达式组成,然后是要在循环中执行的语句(通常是块语句)。

语法:

for ([initialization]; [condition]; [final-expression]){
  statement  
}

初始化:一个表达式(包括一个赋值语句)或一个变量声明。通常用于初始化计数器。表达式可以使用 var 或 let 关键字来声明一个新变量。使用 var 声明的变量不是循环的局部变量,而是与 for 循环在同一范围内。用 let 声明的变量是语句的局部变量。这个表达式的结果是没有意义的。

条件:条件表达式用于判断循环的每次迭代是否可以执行。如果表达式的计算结果为真,则将执行该语句。此表达式是可选的。如果忽略,则认为始终为真。如果评估结果为假,则执行流程将跳到for语句结构之后的第一条语句。

final-expression:每个循环结束时要执行的表达式。执行时间是在评估下一个条件之前。通常用于更新或增加计数器变量。

statement:只要条件的结果为真,就会执行的语句。要在循环体内执行多个语句,请使用块语句 ({ ... }) 将要执行的语句括起来。没有要执行的语句,请使用空语句 (;)。

All expressions in the for statement are optional

2.forEach()

forEach() 方法对数组的每个元素执行一次提供的函数。

语法:

arr.forEach(callback[, thisArg])

范围:

callback:对数组中每个元素执行的函数,函数接收三个参数:

currentValue: The current element in the array being processed.
index optional value: the index of the current element in the array being processed.
array optional value: the array that the forEach() method is operating on.

thisArg:可选参数。 执行回调函数时用作 this 的值(引用对象)。

返回值:未定义

说明:forEach 方法对数组中每个具有有效值的项按升序执行一次回调函数,那些已删除或未初始化的项将被跳过(例如在稀疏数组上)。 回调函数会依次传递三个参数:

1).数组中当前项的值

2).当前项在数组中的索引

3).数组对象本身

3. for VS forEach(遍历数组谁更块)

事不宜迟,让我们比较一下代码。 谁会赢?

const arr = []
 // Create an array with a million elements
 for (let i = 0; i < 100 * 10000; i++) {
   arr.push(i)
 }


 const length = arr.length


 // Use for to walk through the array and print the time
 console.time('for')


 let n1 = 0
 for (let o = 0; o < length; o++) {
   n1++
 }
 console.timeEnd('for') // for: 2.639ms


 // Use forEach to traverse and print the time
 console.time('forEach')
 let n2 = 0
 arr.forEach(() => {
   n2++
 })
 console.timeEnd('forEach') // forEach: 14.059ms

这两种方法控制台。 web 开发人员可以使用 time 和 console.timeEnd 来测量执行 javascript 脚本所消耗的时间。 

注意:控制台 time() 方法是计算器的开始方法,结束方法是 console.timeEnd()。 该方法执行后,控制台会显示执行时间。

b114232343014e28725b946a46538879.png

4. 文末总结

毕竟,for 语句赢得了这场比赛。 让我们总结一下原因:

1).for不创建函数

2).forEach创建每次调用的函数

3).函数现在需要单独的作用域,这会产生额外的开销

注意:日常开发中不要只考虑性能,forEach的代码更具可读性。

最后,感谢你的阅读,如果你觉得有用的话,请记得点赞我,关注我,并分享给你身边的朋友,谢谢,祝你编程愉快!

学习更多技能

请点击下方公众号

22b46cb8ce0cf5282e1232b06ed584c4.gif

7dbc5f0719f485015a929710686d82d5.jpeg

90eca626e17f9c9d1a7d9ff7eb375ef0.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript 中,`forEach` 和 `for` 循环都可以用来迭代数组或类数组对象。它们有一些区别和适用场景,但在性能方面的差异通常可以忽略不计。 1. `forEach` 循环是数组提供的内置方法,它接受一个回调函数作为参数,并对数组中的每个元素执行该回调函数。它更加简洁和易读,适用于对数组中的每个元素进行操作或处理。 ```javascript const array = [1, 2, 3]; array.forEach(item => { console.log(item); }); ``` 2. `for` 循环是一种传统的循环语法,用于迭代数组或类数组对象的元素。它使用索引来访问数组元素,并提供了更多的灵活性和控制能力。 ```javascript const array = [1, 2, 3]; for (let i = 0; i < array.length; i++) { console.log(array[i]); } ``` 在性能方面,`for` 循环通常比 `forEach` 循环稍微一些。这是因为 `for` 循环直接使用索引访问数组元素,而 `forEach` 循环在每次迭代时都会调用回调函数。但是这种差异通常非常微小,只有在处理大型数据集时才可能有明显影响。 然而,需要注意的是,JavaScript 引擎的优化能力不断提升,对于大多数常见的情况,现代的 JavaScript 引擎已经对 `forEach` 进行了优化,因此在实际使用中,性能差异可能是可以忽略不计的。 因此,选择使用 `forEach` 还是 `for` 循环主要取决于代码的可读性和语义的清晰性。如果只是简单地遍历数组并对每个元素执行相同的操作,使用 `forEach` 更加简洁明了。如果需要更多的灵活性和对索引的直接控制,可以使用 `for` 循环。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值