【问题标题】:Why this switch statement isn't work perfectly?为什么这个 switch 语句不能完美运行?
【发布时间】:2022-01-07 15:00:54
【问题描述】:

const number = prompt("Enter your number");
const txt = "You result is : ";

switch (number) {
  case (number >= 80 && number <= 100):
    document.write(`${txt} A+`);
    break;
  case (number >= 70 && number <= 80):
    document.write(`${txt} A gread`);
    break;
  case (number >= 60 && number <= 70):
    document.write(`${txt} B gread`);
    break;
  case (number >= 50 && number <= 60):
    document.write(`${txt} C gread`);
    break;
  case (number >= 33 && number <= 50):
    document.write(`${txt} D gread`);
    break;
  case (number >= 0 && number <= 33):
    document.write(`${txt}  Field !`);
    break;
  case (number > 100 || number < 0):
    document.write(`It's not a valid number. Please input any valid number.`);
    break;
  default:
    document.write(`Not input any number. Please input any number .`);
    break;
}

【问题讨论】:

  • 请定义“工作不完美”。与预期相比,您得到的输出是什么?
  • @HPringles 它似乎总是输出"Not input any number. Please input any number"
  • 我认为这里不应该使用 switch 语句。考虑改用 if/else 吗?
  • 你[不能]不应该以这种方式使用 switch 语句,每个 case 都应该是一个单独的 value,number 将与之进行比较,而不是比较本身。这绝对应该是一个 if/else。你的情况也有重叠:/
  • @pilchard 也许我没有足够强调这种switch 是多么可怕。我会全心全意地建议不要这样做并使用if/else。

标签: javascript switch-statement


【解决方案1】:

使用 switch 语句,您可以在 switch 之后计算表达式。在您的情况下,这将是 number。

因此,您的案例将使用数字进行评估。这就是将会发生的事情:

  • 假设,我们在提示符中输入“88”。
  • 您评估number 的第一件事是(number &gt;= 80 &amp;&amp; number &lt;= 100)。后者的结果是true。
  • 现在将number、88 的值与true 进行比较,如下所示:88===true。
  • 这会产生false,因此会评估下一个案例。
  • 以下情况也会发生同样的情况,直到您遇到默认情况。

【讨论】:

  • 感谢您的解决方案。
  • 没问题。请记住,您可以将答案标记为问题的解决方案。这可以让其他人更快地找到解决方案。
【解决方案2】:

这段代码不起作用的原因有两个:

  • 第一个原因是prompt方法返回一个字符串,你可以通过输入看到

      console.log('Type of number:', typeof number);
      // Expected output: Type of number: string
    

    你可以通过解析提示方法的输出来解决这个问题

      const number = parseInt(prompt("Enter your number"));
    
  • 第二个原因是因为在switch statement 语句中,switch 表达式的评估值与 case 的评估值进行了比较。

    表示number(数字)的值与表达式(number &gt;= 80 &amp;&amp; number &lt;= 100)(比较表达式)进行比较,以此类推。

    因此,除非 yoru case 表达式之一产生一个数字,否则 switch 将尝试将 number 的值评估为表达式(始终为真),这意味着 switch 正在比较 45 === true,而不是匹配任何情况。

只需改用if/else:

if (number >= 80 && number <= 100)
    document.write(`${txt} A+`);
else if (number >= 70 && number <= 80)
    document.write(`${txt} A gread`);
else if (number >= 60 && number <= 70)
    document.write(`${txt} B gread`);
else if (number >= 50 && number <= 60)
    document.write(`${txt} C gread`);
else if (number >= 33 && number <= 50)
    document.write(`${txt} D gread`);
else if (number >= 0 && number <= 33)
    document.write(`${txt}  Field !`);
else if (number > 100 || number < 0)
    document.write(`It's not a valid number. Please input any valid number.`);
else
    document.write(`Not input any number. Please input any number .`);

【讨论】:

  • 谢谢。为您提供翔实的答案。
  • 很高兴为您提供帮助,如果我的回答解决了您的问题,请将其标记为解决方案
猜你喜欢
  • 1970-01-01
  • 2019-10-30
  • 2017-04-13
  • 2021-02-26
  • 2016-01-13
  • 2019-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多