You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用chekPersonalNumber时try/catch未触发catch分支问题求解

问题原因

你在按钮点击的回调函数中,先单独调用了一次chekPersonalNumber(),这次调用没有被try/catch逻辑包裹。当校验不通过时,函数抛出的错误会直接终止代码运行,后续的tryCatchChek()根本不会执行,因此你预期的catch分支逻辑自然不会触发。

解决方法

直接删除点击回调中多余的chekPersonalNumber()调用即可,tryCatchChek()内部已经包含了对该校验函数的调用,且已经做了异常捕获处理。

修正后的完整代码

document.querySelector('button').addEventListener('click', function() {
    // 移除多余的无捕获校验调用
    tryCatchChek();
});


function chekPersonalNumber () {
    let personalNumber = document.querySelector('#personal_number').value;
    if(personalNumber.length !== 11) {
        throw "length must be 11 symbols"
    }
    return true;
}

function tryCatchChek () {
    try {
        chekPersonalNumber ()
        console.log("working")
        document.querySelector('#trueOrFalse').innerHTML = 'true'
        document.querySelector('#trueOrFalse').classList.add("true")

    } catch (e) {
        console.log ("doesnt working")
        document.querySelector('#trueOrFalse').innerHTML = 'false'
        document.querySelector('#trueOrFalse').classList.add("false")
    }
}

补充说明

如果你有需要在校验函数执行前做其他逻辑的场景,也可以把所有调用chekPersonalNumber()的逻辑都放在try块内,避免无捕获的抛出错误打断代码执行。

内容的提问来源于stack exchange,提问作者Soso Sosiashvili

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 08:39:02