为什么 switch case 中的逻辑 OR 运算符的行为很奇怪?

Cem*_*aan 14 javascript

testMyNumber函数似乎认为第二个位置的数字不匹配。

为什么 4 和 10 返回默认情况?

function testMyNumber(number) {
  switch (number) {
    case 6:
      return number+" is 6";
      break;
    case (3 || 4) :
      return number+" is 3 or 4";
      break;

    case 9 || 10 :
      return number+" is 9 or 10";
      break;

    default:
      return number+" is not in 3,4,6,9,10";
      break;
  }
};
console.log(testMyNumber(6));
console.log(testMyNumber(3));
console.log(testMyNumber(4));
console.log(testMyNumber(9));
console.log(testMyNumber(10));
Run Code Online (Sandbox Code Playgroud)

有没有办法使这项工作?

FZs*_*FZs 14

因为它不打算以这种方式使用。

|| 如果为真,则返回其第一个操作数,否则返回第二个操作数。

3 || 4返回3,因为3是真的,所以case只会检查3

console.log(3 || 4); //3, because it is truthy
console.log(0 || 1); //1, because 0 is falsy
Run Code Online (Sandbox Code Playgroud)

为了使您的代码工作,请使用单独的案例,这些案例会失败:

function testMyNumber(number) {
  switch (number) {
    case 6:
      return number+" is 6";
    case 3:
    case 4:
      return number+" is 3 or 4";

    case 9:
    case 10:
      return number+" is 9 or 10";
    default:
      return number+" is not in 3,4,6,9,10";
  }
};
console.log(testMyNumber(6));
console.log(testMyNumber(3));
console.log(testMyNumber(4));
console.log(testMyNumber(9));
console.log(testMyNumber(10));
Run Code Online (Sandbox Code Playgroud)


Jes*_*per 8

为什么 4 返回默认情况?

因为(3 || 4)等于3,所以case (3 || 4):和写作一样case 3:

您使用的语法不正确。像这样写:

case 3:
case 4:
    return number + " is 3 or 4";
Run Code Online (Sandbox Code Playgroud)