JavaScript 中,使用 「抛出错误的方式」停止 forEach 遍历可行吗?会造成什么隐藏问题?

5 min read

假设我有如下代码

javascript
[1,2,3].forEach((number)=>{
console.log(number)
})

我的需求是当遍历到 number === 2 的时候,停止 forEach 遍历,按正常逻辑,应该将 forEach 替换为 for 循环,然后在 for 循环中执行 break 操作,但是也可以在 forEach 中,通过 throw new Error() 的方式,终止遍历,如下代码所示

javascript
[1,2,3].forEach((number)=>{
if(number === 2){
throw new Error()
}
console.log(number)
})

想问下大家

,这种做法可行吗?会造成什么隐藏问题吗?

这种方式虽然能够实现需求,但并不是推荐的做法,因为它会造成隐藏的问题:

  1. 非预期的退出:使用 throw new Error() 会直接抛出一个异常,可能会导致未处理的异常,从而终止了整个程序。这意味着你的程序会立即停止而不是正常终止。如果你没有捕捉到这个异常,那么程序将终止并导致非预期的退出。

  2. 不可控的异常:如果你直接使用 throw new Error(),那么将会抛出一个不可控异常,这个异常可能会被捕捉到并处理,但也可能被忽略,如果被忽略,那么在后续的开发过程中,程序发生异常时,可能会造成难以调试和维护的后果。

因此,建议使用 for 循环替代 forEach,并在 for 循环中使用 break 的方式,来停止遍历。如果你必须使用 forEach,则请确保使用 try / catch 块捕获异常。