有没有办法在javascript中编写条件切换语句?
我猜不是,因为以下内容总是默认:
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 / else语句?
谢谢:)
答案 0 :(得分:117)
像这样:
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;
}
case
语句中的表达式将评估为true
或false
,如果匹配switch
条件......瞧。 default
的行为类似于else
。
奖励:您只需将true
替换为false
即可反转整个逻辑。使用if ... else if
语句,您必须单独编辑每个if子句。
答案 1 :(得分:28)
在switch
statement中,switch
表达式的评估值与案例的评估值进行比较。所以这里将raw_value
(数字)的值与raw_value > 10.0
(比较表达式)和raw_value > 5.0
(比较表达式)进行比较。
因此,除非您的一个案例表达式产生的数字等于11.0
,或者您使用switch
表达式true
,否则您将始终获得默认情况。
只需使用简单的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;
}
答案 2 :(得分:2)
不要在家里尝试这个,或者把它当回事,这只是为了带来乐趣......
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
答案 3 :(得分:1)
不,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;
}
和“长”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;
}
所以在你的情况下,最好使用第二个而不是第一个......