switch语句总是在javascript中变为默认值

时间:2017-07-06 22:15:00

标签: javascript switch-statement

我想做一个简单的程序,根据是否满足特定条件打印出不同的短语。我们在函数中输入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”。所以,我认为这是不允许我的案例正确评估参数的。有些东西没有被正确定义。

2 个答案:

答案 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就会被执行。