【问题标题】:Condition in switch's case is ignored开关情况下的条件被忽略
【发布时间】:2021-11-06 05:58:20
【问题描述】:

我正在尝试使用如下的 switch 语句。但即使状态为 301,大小写 case (status > 200 && status < 400) 也会被忽略,结果是“默认”大小写。 我究竟做错了什么?在case语句中不能使用条件吗?

status = 301;
switch (status) {
  case 0:
  case 200:
    console.log('200');
    break;
  case (status > 200 && status < 400):
    console.log('200-400');
    break;
  case 404:
    console.log('404');
    break;
  default:
    console.log('Si è verificato un errore irreversibile.');
}

最后我用一个简单的 if 解决了,但我想知道为什么这不起作用。

【问题讨论】:

  • 为什么status &gt; 200 &amp;&amp; status &lt; 400truefalse)等于status(可能是一个数字)? - switch (x) case y 就像if (x === y)

标签: javascript if-statement switch-statement


【解决方案1】:

switch/case 在 JavaScript 中不是这样工作的;您只能匹配值,而不是条件。这里发生的情况是status &gt; 200 &amp;&amp; status &lt; 400 评估为true,而true 显然与301 不同。

确实,一个简单的if/else if/.../else 链是这里通常的解决方案。

【讨论】:

    【解决方案2】:

    这可以通过以下方式实现:

    const status = 301;
    switch (true) {
      case status === 0:
      case status === 200:
        console.log('200');
        break;
      case (status > 200 && status < 400):
        console.log('200-400');
        break;
      case status === 404:
        console.log('404');
        break;
      default:
        console.log('Si è verificato un errore irreversibile.');
    }
    
    

    但我同意@Thomas 的建议,我们应该更喜欢使用if/else 链来解决这类问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 1970-01-01
      • 2018-07-13
      • 2012-06-23
      • 2019-06-02
      相关资源
      最近更新 更多