JS循环中断与异步for...in forEach map
一 JS循环中断与异步:https://juejin.cn/post/6844903842425864200
- forEach和map,针对await不生效;使用break或continue会报错;使用return 无效;
- for循环、for...in,for...of,支持await,for和for...of中可以使用break和continue;for...in会忽略continue和break
Array.prototype.every();Array.prototype.some();Array.prototype.find();Array.prototype.findIndex()可以终止循环:
1 // every在碰到return false的时候,中止循环。 2 let arr = [1, 2, 3, 4, 5] 3 arr.every(item => { 4 console.log(item); //输出:1,2 5 if (item === 2) { 6 return false 7 } else { 8 return true 9 } 10 }) 11 // some在碰到return ture的时候,中止循环。 12 arr.some(item => { 13 console.log(item); //输出:1,2 14 if (item === 2) { 15 return true 16 } else { 17 return false 18 } 19 })
二 for...of与其他遍历语法比较:(https://juejin.im/post/5aea83c86fb9a07aae15013b)
1. for循环:
- 循环效率高;
- 写法比较麻烦。
2. forEach循环:
- 适用于循环次数未知,或者计算循环次数比较麻烦情况下;或者只是进行集合或数组遍历;
- 无法中途跳出forEach循环,break命令或return命令都不能生效。
- 不能对数组或集合进行修改(添加删除操作),如果想要修改就要用for循环。
3.Object.keys():
- 返回对象自身可枚举属性组成的数组
- 不会遍历对象原型链上的属性以及 Symbol 属性
- 对数组的遍历顺序和 for in 一致
4. for...in循环:主要为遍历对象而设计,不适用于遍历数组。
遍历数组缺点:
- 数组的键名是数字;
- 不仅遍历数字键名,还会遍历手动添加的其他键,甚至包括原型链上的键;
- 某些情况下,for...in循环会以任意顺序遍历键名。
5. for ...of:
- es6 中添加的循环遍历语法;
- 支持遍历数组,类数组对象(DOM NodeList),字符串,Map 对象,Set 对象,Generator 对象;
- 不支持遍历普通对象;
- 遍历后输出的结果为数组元素的值;
- 可搭配实例方法 entries(),同时输出数组的内容和索引;
三 for循环嵌套:
for循环执行过程:
for(①初始化表达式;②条件表达式;③更新表达式){ 循环体语句; }
1、执行初始化表达式,初始化变量;(初始化表达式只执行一次)
2、执行条件表达式(Boolean值),判断是否执行循环
- 如果表达式值为true则执行循环体,
- 如果表达式值为false则退出循环;
4、执行更新表达式,更新表达式执行完之后,则继续执行第2步
如此循环往复,直到条件表达式的值为false。
推荐阅读:
JS跳出for循环三种方法的区别(break、return、continue)