JavaScript中switch语句无法正常匹配分支的问题求助
JavaScript中switch语句无法正常匹配分支的问题求助
嘿,我来帮你排查下这个问题!你写的代码本来想判断输入的数字能不能被2或3整除,但总是走到default分支,其实是对switch语句的工作逻辑理解错了,咱们来捋清楚:
首先,你的代码有两个关键问题:
- prompt返回的是字符串类型:
prompt()获取的用户输入默认是字符串,而你case里的num % 2 == 0会返回布尔值(true/false)。switch是用**严格相等(===)**来匹配switch()里的表达式和case值的,字符串和布尔值永远不可能严格相等,所以根本匹配不到任何case,直接跳去default了。 - switch的case写法不符合语法逻辑:switch的正确用法是
switch(要判断的表达式),case后面跟的是这个表达式可能的具体取值,而不是条件判断。你现在把条件写在case里,相当于拿num(字符串)和true/false做比较,肯定匹配不上。
那该怎么改呢?给你两种靠谱的方案:
方案一:修正switch的写法
把switch的表达式改成true,这样case里的条件会被求值为布尔值,和true做匹配,同时记得把输入的num转成数字类型(不然取余运算可能出问题):
var num = Number(prompt("Enter your number")); switch (true) { case (num % 2 === 0 && num % 3 === 0): alert("the number is divisible by both 2 and 3"); break; case (num % 2 === 0): alert("the number is divisible by 2"); break; case (num % 3 === 0): alert("the number is divisible by 3"); break; default: alert("the number is not divisible by either 2 or 3"); break; }
这里要注意,判断同时被2和3整除的分支得放在最前面,不然那些同时满足的数会先匹配到“被2整除”的case,就不会走到这个分支啦。
方案二:用if-else更直观
其实这种多条件递进判断的场景,用if-else写出来可读性更高,也不容易踩语法坑:
var num = Number(prompt("Enter your number")); if (num % 2 === 0 && num % 3 === 0) { alert("the number is divisible by both 2 and 3"); } else if (num % 2 === 0) { alert("the number is divisible by 2"); } else if (num % 3 === 0) { alert("the number is divisible by 3"); } else { alert("the number is not divisible by either 2 or 3"); }
这样就能正确判断数字的整除情况啦!
备注:内容来源于stack exchange,提问作者Abhay Kumar
相关产品推荐
相关产品推荐

