今天遇到个bug,也是工作中经常遇到的问题,如果不注意,就会给自己留个坑。
是一段 “检查用户输入”的代码,对于表单中的必填信息进行逐一检查,如果用户没填或者填错则弹框提示。
如下为示例代码:
有两项检查,一个是检查数组nameList,一个是检查isCheck,要求如果一项不符合要求,则弹框报错返回。现在nameList中有两条数据的abroad=true,则第一段检查不通过,应该弹框:“有出国同学”,结果却弹出“有未通过同学”。
这里的问题就在于“forEach”,其语法:
array.forEach(function(currentValue, index, arr), thisValue)
forEach的第一个参数是回调函数,也就是上面第一个项检查的 return 是回调函数的返回,而不是外层函数体的返回,nameList 中有两条符合条件,则返回两次。所以这里的 return 完全没起到返回 checkStudent 函数结尾的作用。如果把forEach改成for循环,就不会出现该问题。不改for循环,增加两个判断也可以解决这个问题。
第一个判断:防止条件进入两次。
第二个判断:防止流程继续走下去。