我想做一个简单的程序,根据是否满足特定条件打印出不同的短语。我们在函数中输入2个整数参数,它评估一个数字是大于,小于,还是两个数字是否相等。我的代码如下所示:
function CheckNums(num1,num2) {
switch (num1,num2) {
case (num2>num1):
console.log('num2 greater than num1');
break;
case (num2 === num1):
console.log('both equal');
break;
default:
console.log('num1 greater than num2');
}
}
无论是哪种情况,我是否输入:CheckNums(4,5),CheckNums(2,2),CheckNums(5,4)程序默认运行。
重要提示:我不是要求替代解决此问题的方法。我已经设法使用if语句或三元运算符来解决它。我问的是:为什么这个开关不工作?
我咨询过的问题没有解决我的问题:
JavaScript switch statement only executes the default case
解决方案:这个人有一个问题,即Math.random()生成器只生成带小数位的数字,当然,除了默认情况下,这两种情况都不会。
JS Switch case not working correctly always default is executed
sol:这家伙正在输入字符串作为参数,并期望在案例中使用int值。
其他说明:
- 也许答案在于使用parseint? (假设参数不是作为整数输入的。)
- 我删除了案例中的括号。这并没有解决我的问题。
- 对于第二种情况,我还尝试使用等于运算符(==)而不是Identity运算符(===)。第二种情况仍无效。
我最好猜测问题隐藏在哪里: 当我在谷歌Chrome控制台编译程序时,我收到以下通知:“undefined”。所以,我认为这是不允许我的案例正确评估参数的。有些东西没有被正确定义。
答案 0 :(得分:2)
如果您真的想使用switch语句来做到这一点,那么您必须要聪明。提示:IF更容易。
function CheckNums(num1, num2) {
switch (Math.sign(num1 - num2)) {
case -1:
console.log('num2 greater than num1');
break;
case 0:
console.log('both equal');
break;
case 1:
console.log('num1 greater than num2');
break;
default:
console.log('Something went wrong');
break;
}
}
CheckNums(8, 5);
CheckNums(3, 4);
CheckNums(10, 10);
CheckNums("argh", "argh");

答案 1 :(得分:1)
为什么这个开关不工作?
因为你所写的内容相当于
const temp = num1,num2; // comma operator evaluates to the second operand
if (temp === (num2>num1)) {
console.log('num2 greater than num1');
} else if (temp === (num2 === num1)) {
console.log('both equal');
} else {
console.log('num1 greater than num2');
}
你正在将一个数字与布尔值进行比较,这是绝对不对的,因此如果没有一个匹配,default
就会被执行。