JS的for有四种写法?

1,623 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

入门级教程,请批评指正。

1. 传统for循环

for (init; cond; inc) {
  // body
}

与C++或Java类似,for关键字后用小括号描述循环设置,在小括号中用两个分号;将循环设置隔断为三个部分,分别为:

  1. init初始化语句(指令),在整个循环开始前执行
  2. cond条件(逻辑表达式),表示循环继续的条件
  3. inc自增语句(指令),在每次循环体结束以后执行

整个循环的执行步骤为:

  1. 执行init语句
  2. 计算cond表达式,若为则退出循环
  3. 执行循环体body
  4. 执行inc语句,随后返回步骤2

例如:

let sum = 0
for (let i = 1; i <= 10; i++) {
  sum += i
}
console.log(sum) // 55

2. for of 循环

for (const v of iterable) {
  // body
}

这里的iterable是指各种能够被迭代的JS对象。最常用的例子是数组Array和字符串String,此外还有arguments、NodeList、Map、Set等等。执行的效果是,for循环会遍历iterable的每个项目,在每次循环中,代表变量v即为当前循环的项目。

例如:

const arr = [1, 2, 3, 4, 5]
let sum = 0
for (const v of arr) {
  sum += v
}
console.log(sum) // 15

高级:for await (const v of iterable) 可以用于异步循环遍历。

3. for in 循环

for (const k in object) {
  // body
}

for in循环会遍历object的每个属性,在每次循环中,代表变量k即为当前属性的属性名称(key)

例如:

const obj = { a: 1, b: 2, c: 3 }
let sum = 0
for (const k in obj) {
  sum += obj[k] // read the value from key
}
console.log(sum) // 6

特别注意for of和for in的区别,前者的代表变量是项目的值(value),后者的代表变量是属性的名称(key)。

4. forEach方法

Array.forEach(Function)

forEach是JS数组的原生方法。它接受一个函数作为参数,执行效果是对数组的每一个项目,执行传入的函数。传入的函数可以接受三个参数:(element, index, array),其中element表示当前项目的值,index表示当前项目的下标,array表示循环的数组本身。

例如:

const arr = [1, 2, 3, 4, 5]
let sum = 0
arr.forEach(element => sum += element)
console.log(sum) // 15

通常在程序中我们更倾向于使用for of循环来代替forEach方法,因为for关键字使得代码的可读性更高。但是在一些特殊的情况下,我们依然会使用forEach方法循环遍历数组中的每个项目。

高级:forEach可以传入异步函数,等效于使用for await (const v of Array)