为何JavaScript中try/catch无法捕获除以零的错误?
为什么1/0无法被catch捕获,但手动抛错可以?
这个问题其实是JavaScript语言本身的设计规则导致的,咱们一步步拆解来看:
两种场景的本质区别
- 手动抛出
new Error():这是你主动触发了一个显式异常,JavaScript会立即终止try块内后续代码的执行,并跳转到catch块处理这个异常对象,完全符合try/catch的设计逻辑。 1 / 0运算:在ECMAScript标准中,这个操作并不会抛出错误!它会返回一个特殊的合法数值Infinity(正无穷),属于JavaScript数值类型的一部分。既然代码没有触发异常,try块会正常执行完毕,自然不会进入catch块。
你可以运行下面的代码验证这一点:
try { let test = 1 / 0; console.log(test); // 控制台会输出 Infinity } catch (err) { console.log('Caught Err...') }
补充:什么时候除以零会触发异常?
如果是使用BigInt类型进行除以零运算,就会抛出RangeError,这时候catch块就能正常捕获了:
try { let test = 1n / 0n; } catch (err) { console.log('Caught Err:', err); // 会捕获到 RangeError: Division by zero }
内容的提问来源于stack exchange,提问作者user2109254
相关产品推荐
相关产品推荐

