JS for循环写法
Phantomlsh 人气:21. 传统for循环
for (init; cond; inc) { // body }
与C++或Java类似,for关键字后用小括号描述循环设置,在小括号中用两个分号;将循环设置隔断为三个部分,分别为:
- init初始化语句(指令),在整个循环开始前执行
- cond条件(逻辑表达式),表示循环继续的条件
- inc自增语句(指令),在每次循环体结束以后执行
整个循环的执行步骤为:
- 执行init语句
- 计算cond表达式,若为假则退出循环
- 执行循环体body
- 执行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)。
附完整实例:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <script> // 此处添加测试数组 textArr var textArr = [], i = 0; while (i<40000000) { textArr.push(i) i++ } const forTest = (textArr) => { console.time('time forTest') var newArr = [] // 第一种写法 不带声明变量的写法 (运行效率最好,性能最佳) for (var i = 0; i < textArr.length; i++) { newArr.push(i) } console.timeEnd('time forTest') } const forTest1 = (textArr) => { console.time('time forTest1') var newArr = [] // 第二种带声明变量的写法 (相比之下要差一些) for (var i = 0,len = textArr.length; i < len; i++) { newArr.push(i) } console.timeEnd('time forTest1') } const forTest2 = (textArr) => { console.time('time forTest2') var newArr = [] // 第三种 forEach的写法 (效率最差,运行最慢) textArr.forEach(item => { newArr.push(item) }) console.timeEnd('time forTest2') } const forTest3 = (textArr) => { console.time('time forTest3') var newArr = [] // 第四种是 for循环的简便写法, (运行效率与不带声明变量的写法相差无几,相比之下,可以使用这种写法,最优),仅仅是本人的观点 for (var i = 1,cur; cur = textArr[i++];) { newArr.push(i) } console.timeEnd('time forTest3') } forTest(textArr) forTest1(textArr) forTest2(textArr) forTest3(textArr) </script> </body> </html>
总结
加载全部内容