忽略 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
链来解决这类问题。
我正在尝试使用如下的 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
链来解决这类问题。