忽略 switch 情况下的条件

Condition in switch's case is ignored

我正在尝试使用如下的 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解决了,但我想知道为什么这不起作用。

这不是 switch/case 在 JavaScript 中的工作方式;您只能匹配值,不能匹配条件。这里发生的是 status > 200 && status < 400 计算为 true,而 true 显然与 301 不同。

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

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

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 链来解决这类问题。