我的编程空间,编程开发者的网络收藏夹
学习永远不晚

forEach循环里break使用方式详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

forEach循环里break使用方式详解

一. 在forEach里使用break 会发生什么

大家都知道 js 的 forEach里是不能使用break。但是为什么不能在forEach里使用呢?在forEach里使用break 会发生什么呢?

纸上得来终觉浅,绝知此事要躬行。要想知道发生什么,不妨在代码里验证一下。

let arr = [1, 2, 3, 4, 5];
arr.forEach((item, index) => {
    if (item > 2) {
        break
    }
    console.log(item)
})
// SyntaxError: Illegal break statement (非法中断语句)

在控制台可以看到输出:语法错误。

二. 为什么不能在forEach里使用break

要想知道forEach里为什么不能使用break,必须先要搞清楚break的语法。

你真的了解break吗

break 表示中止当前循环。

语法:break [label];

label:与语句标签相关联的标识符。如果 break 语句不在一个循环或者Switch语句中,则该项是必须的。

我们看一个例子:

我们平时正常使用时

let arr = [1, 2, 3, 4, 5]
for (let i = 0; i < arr.length; i++) {
    if (arr[i] > 2) {
        break // 大于2 跳出整个循环
    }
    console.log(arr[i]) // 1, 2
}

break 与语句标签一起使用时

let arr = [1, 2, 3, 4, 5]
outer_block: // 标识最外层循环
for (let i = 0; i < arr.length; i++) {
    console.log('i', arr[i]) // 1
    inner_block: // 标识里面的for循环
    for (let j = 0; j < arr.length; j++) {
        if (j > 3) {
            break outer_block  // 跳出最外层循环
        }
        console.log('j', arr[j]) // 1, 2, 3, 4
    }
}

输出结果:最外层输出:1,最次层输出:1,2,3,4。可以看出brake终止循环是有条件的。我们在回来看forEach这个问题。

先看下forEach语法:

forEach(callbackfn: (value: T, index: number, array: T[]) => void, thisArg?: any): void;

是上面的定义相当于:

Array.prototype.forEach = function(callback) {
    for (let i = 0; i < this.length; i++) {
        callback(this[i], i, this);
    } 
};

可以看出:我们在forEach里使用break,其实是在callback里使用break。再明白一点,其实就是相当于你在for循环里这样写:

let arr = [1, 2, 3, 4, 5]
outer_block: 
for (let i = 0; i < arr.length; i++) {
    console.log('i', arr[i])
    inner_block1:
    (function() {
        inner_block2:
        break // 报错,不能直接使用break
    })()
}

到这里我想你已经明白了为什么不能在forEach里使用break了。回到本文的题目上来。

三.如何在forEach的循环里break?

查阅MDN,上面有一个备注:

编辑切换为居中

MDN

在forEach里合法的使用break

function breakInForEach(arr) {
	let BreakException = {};
	let res = false;
	try {
	    arr.forEach(item => {
	       if (item === 2) {
	          res = true;
		  throw BreakException;
	        }
	    })
	}
	catch(e) {
	    if (e !== BreakException) throw e
	}
	return res;
}
console.log(foreachBreak([1, 2, 3, 4, 5, 6])); // true

也可以使用every 或者 some等

最推荐的方式呢,就是这种需要break的场景下,直接使用every或者some。

  • every: 碰到return false的时候,循环中止,return true 循环继续;
  • some: 碰到return ture的时候,循环中止,return false 循环继续;

总结

本文介绍了为什么不能在forEach里使用break;在forEach里使用break 会发生什么以及怎样在forEach里使用break,更多关于forEach循环break使用的资料请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

forEach循环里break使用方式详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java中怎么forEach循环中使用lambda表达式

本篇文章为大家展示了Java中怎么forEach循环中使用lambda表达式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1.数组怎么使用lambda数组不能直接在forEach中使用lambda表
2023-06-20

Java List接口与Iterator接口及foreach循环使用的方法

这篇文章主要介绍“Java List接口与Iterator接口及foreach循环使用的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java List接口与Iterator接口及foreach
2023-06-30

详解python中字典的循环遍历的两种方式

开发中经常会用到对于字典、列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式。 注意: python2和python3中,下面两种方法都是通用的。 1. 只
2022-06-04

Shell中的while循环几种使用实例详解

1.利用while循环计算1到100的和: 示例代码1:#!/bin/bash i=1 sum=0 while [ $i -le 100 ] dolet sum=sum+$ilet i++ done echo $sum示例代码2:利用whi
2022-06-04

MySql存储过程循环的使用分析详解

目录简介场景描述解决方案案例总结简介每一门数据库语言语法都基本相似,但是对于他们各自的一些特性(函数、存储过程等)的用法就不大相同了,就好比Oracle与mysql存储过程写起来就很多不同的地方,在这里主要是跟大家分享一下MySql存储过
2022-06-29

编程热搜

目录