switch语句在javascript中总是默认

whlutmcx  于 2023-05-12  发布在  Java
关注(0)|答案(3)|浏览(119)

我想做一个简单的程序,根据是否满足特定条件,打印出不同的短语。我们在一个函数中输入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
解决办法:这个家伙输入字符串作为参数,并期待在案件中的int值。

其他备注:

  • 也许答案在于使用Parseint?(假设参数不作为整数输入。)
  • 我把箱子里的括号去掉了但这并没有解决我的问题。
    对于第二种情况,我也尝试使用相等运算符(==)而不是恒等运算符(===)。第二个案例仍然没有奏效。

**我最好的猜测问题隐藏在哪里:**当我在谷歌Chrome控制台编译程序时,我得到以下通知:“undefined”。所以,我认为这就是为什么我的案例不能正确地评估参数。有些东西没有被正确定义。

70gysomp

70gysomp1#

如果你真的想使用switch语句来实现这一点,你必须要聪明。提示:如果更容易。

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");
jaql4c8m

jaql4c8m2#

为什么这个开关不工作?
因为你所写的相当于

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

g6ll5ycj

g6ll5ycj3#

here提供了关于它为什么不工作的解释。这与开关实际工作方式有关。
下面是修改后的代码:

function CheckNums(num1, num2) {
  switch (true) {
    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(5, 6);

相关问题