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
相关产品推荐
相关产品推荐

