Javascript 条件切换语句
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/4082204/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Javascript conditional switch statement
提问by AP257
Is there a way to write a conditional switch statement in javascript?
有没有办法在 javascript 中编写条件 switch 语句?
I'm guessing not, since the following is always going to default:
我猜不是,因为以下总是默认的:
var raw_value = 11.0;
switch(raw_value)
{
case (raw_value > 10.0):
height = 48;
width = 36;
break;
case (raw_value > 5.0):
height = 40;
width = 30;
break;
default:
height = 16;
width = 12;
break;
}
If not, what should I use instead - a long if/else statement?
如果没有,我应该使用什么来代替 - 一个很长的 if/else 语句?
thanks :)
谢谢 :)
采纳答案by Gumbo
In a switch
statement, the evaluated value of the switch
expression is compared the the evaluated values of the cases. So here the value of raw_value
(number) is compared to raw_value > 10.0
(comparison expression) and raw_value > 5.0
(comparison expression).
在switch
语句中,将switch
表达式的评估值与案例的评估值进行比较。所以这里将raw_value
(number) 的值与raw_value > 10.0
(comparison expression) 和raw_value > 5.0
(comparison expression) 进行比较。
So unless one of your case expressions yield a number equal to 11.0
or you use the switch
expression true
, you will always get the default case.
因此,除非您的 case 表达式之一产生等于11.0
或您使用该switch
表达式的数字,否则true
您将始终获得默认情况。
Just use a simple if
/else
instead:
只需使用简单的if
/else
代替:
var raw_value = 11.0;
if (raw_value > 10.0) {
height = 48;
width = 36;
} else if (raw_value > 5.0) {
height = 40;
width = 30;
} else {
height = 16;
width = 12;
}
回答by DanMan
Like this:
像这样:
var raw_value = 11.0;
switch(true) {
case (raw_value > 10.0):
height = 48;
width = 36;
break;
case (raw_value > 5.0):
height = 40;
width = 30;
break;
default:
height = 16;
width = 12;
}
The expressions in the case
statements will evaluate to true
or false
, and if that matches the switch
condition... voilà. The default
acts like an else
.
case
语句中的表达式将计算为true
or false
,如果它与switch
条件匹配......瞧。该default
就像一个else
。
Bonus: you can invert the whole logic by simply replacing true
with false
. With if ... else if
statements, you'd have to edit every if-clause individually.
奖励:您可以通过简单地替换true
为来反转整个逻辑false
。对于if ... else if
语句,您必须单独编辑每个 if 子句。
回答by Juan Mendes
Don't try this at home, or take it too seriously, this is just for sugary fun...
不要在家里尝试这个,也不要太当真,这只是为了甜蜜的乐趣......
function conditionalSwitch(value, cond, callback /* cond, callback, cond, callback, ... */ ) {
for (var i = 1; i < arguments.length; i += 2) {
if (arguments[i](value)) {
arguments[i + 1](value);
return;
}
}
}
function test(val) {
let width, height;
conditionalSwitch(val,
(val) => val > 10,
() => [height, width] = [48,36],
(val) => val > 5,
() => [height, width] = [40, 30],
// Default
() => true,
() => [height, width] = [16, 12]
)
console.log(width, height);
}
test(4.9); // 12 16
test(5.1); // 30 40
test(10.1); // 36 48
回答by Romain Linsolas
No, the switch
statement does not work used like that. However, this statement is not always simpler. For example, the switch
version takes 15 lines:
不,该switch
语句不能像那样使用。然而,这种说法并不总是更简单。例如,该switch
版本需要 15 行:
var raw_value = 11.0;
switch(raw_value) {
case (raw_value > 10.0):
height = 48;
width = 36;
break;
case (raw_value > 5.0):
height = 40;
width = 30;
break;
default:
height = 16;
width = 12;
break;
}
and the "long" if/else
version only11:
而“长”if/else
版本只有11:
var raw_value = 11.0;
if (raw_value > 10.0) {
height = 48;
width = 36;
} else if (raw_value > 5.0) {
height = 40;
width = 30;
} else {
height = 16;
width = 12;
}
So in your case, it is better to use the second one than the first...
所以在你的情况下,最好使用第二个而不是第一个......