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

JS开发秒表时num设为1仍触发switch的default分支是什么原因?

问题根因
  • switch语法使用错误:JavaScript的switch语句会将switch()括号内的表达式返回值,与每个case后的值做严格全等(===)匹配。你的代码中switch(num)传入的是数值类型的num,但case后写的num===1是布尔表达式,返回值为布尔类型true/false,数值1和布尔值true的严格相等判断结果为假,因此永远无法匹配case分支,只能触发default逻辑。
  • case分支缺失break语句:即便修正了case的写法,若没有在case逻辑末尾加break,匹配成功后代码会继续向下执行,最终仍会运行default分支的代码。
  • 赋值操作书写错误:代码中的num ===0是全等比较语句,不会修改num的取值,若要赋值需写为num = 0。
修正后的核心代码示例
let myFunc = ()=> {
    // 每次启动前清除已有定时器,避免多次点击start生成多个定时器导致计时加速
    if(window.timer) clearInterval(window.timer)
    window.timer = setInterval(()=>{
        switch (num){
            // case后直接写要匹配的num值即可
            case 1:
                mins.innerHTML = `0` + num;
                num = 0;
                secs.innerHTML =`0`+  num++; 
                // 加break终止switch后续判断
                break;
            default:
                console.log(`default test`)
        }
     } , 1000);
};

你当前的秒表逻辑还未完成,后续可以补充秒数累加到60后分钟加1、分钟累加到60后小时加1的判断逻辑,stop按钮也可以绑定清除定时器的逻辑完成暂停功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:09:02