一句话说明:foreach循环中不能使用break和continue,return的含义也变了。
背景
在提交数据之间要对数据的格式进行验证,而数据是以对象数据的格式的保存的。如:
[{num:12},{num:-1},{num:8}]。
错误使用foreach
onSubmit = () => {
let data = [{num:12},{num:-1},{num:8}]
data.forEach(item=>{
if(item.num < 0){
return // 注意这里的return根本不会中断整个函数。
}
})
$.ajax({
// .....
})
}
以上的return 根本不会中断整个函数,其后的ajax还是提交出去了。也就是说foreach中的return没有起到期望的中止函数的作用。
且看如下代码
[1,2,3,4,5].forEach(item => {
console.info(item);
if(item > 2)
return
})
它会正常输出1,2,3,4,5。而不是在>2时中断整个循环输出。
foreach 中的break, continue
直接报错!
foreach 中的return
[1,2,3,4,5].forEach(item => {
if(item > 2)
return
console.info(item);
})
它会正常输出1,2。return 而不是在>2时中断整个循环输出,只是说其后的语句不再被执行,这一点类似于for循环中的continue。
解决方法
- 使用for,而不是forEach。
- 在forEach中会用 try throw 抛出异常。