执行以下程序,输出结果为()
var arr = [2,1,3,5,9];
var count = 0;
arr.forEach((val1,val2)=>{
count++;
if(count % 3 == 0){
return;
}
console.log(val1);
})
A
2 1
B
0 1
C
0 1 3 4
D
2 1 5 9
正确答案:D
arr.forEach()是循环遍历数组,它的参数是一个函数,每迭代一次数组,就执行函数一次,
也就是,虽然在函数内部存在return语句,但是当执行return时相当于退出一次迭代,当前数组会继续下一次迭代,
函数有两个参数,参数val1为数组的元素值,参数val2为数组元素对应的索引,因此正确答案为D选项。
var arr = [2,1,3,5,9];
var count = 0;
arr.forEach((val1,val2)=>{//arr = [2,1,3,5,9];
count++; //第一次循环count++为0
if(count % 3 == 0){ //第一次循环count为1,不满足条件,不进入if条件里
return;
}
console.log(val1);//第一次循环val1=2
})
arr.forEach((val1,val2)=>{//arr = [2,1,3,5,9];
count++; //第二次循环count++为1
if(count % 3 == 0){ //第二次循环count为2,不满足条件,不进入if条件里
return;
}
console.log(val1);//第二次循环val1=1
})
arr.forEach((val1,val2)=>{//arr = [2,1,3,5,9];
count++; //第三次循环count++为2
if(count % 3 == 0){ //第三次循环count为3,满足条件,进入if条件里
return; //return跳出本次循环,不执行后续代码
}
console.log(val1);//第三次循环没执行到这
})
arr.forEach((val1,val2)=>{//arr = [2,1,3,5,9];
count++; //第四次循环count++为3
if(count % 3 == 0){ //第四次循环count为4,不满足条件,不进入if条件里
return;
}
console.log(val1);//第四次循环val1=5
})
arr.forEach((val1,val2)=>{//arr = [2,1,3,5,9];
count++; //第五次循环count++为4
if(count % 3 == 0){ //第五次循环count为5,不满足条件,不进入if条件里
return;
}
console.log(val1);//第五次循环val1=9
})
在forEach中使用 return false 或者 break无法跳出整个循环,并且使用break会直接报错
return false;//仍然会执行完循环,但不再执行循环后面的js代码 let arr = [2,31,3] arr.forEach((val, index) => { if(val===31) { return false } console.log('执行第' + index + '次数') }) 执行第0次数
执行第2次数
其中val =31 这一次的循环return false以后的代码不再执行
根据MDN的forEach方法注意点,除了抛出异常以外,没有办法跳出或中止forEach方法。如果需要中止或跳出循环,不应该是forEach
forEach:使用 return false 或者 break无法跳出整个循环,并且使用break会直接报错
for of: 与for(;;)类似,可以跳出循环
every:every的判断是在识别到不满足的条件时,立刻停止
filter、some:无法跳出循环,并且使用break会直接报错