JavaScript条件切换语句
有没有办法在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语句?
谢谢 :)
在一个switch
语句中 , switch
expression式的评估值与案例的评估值进行比较。 所以这里raw_value
(number)的值与raw_value > 10.0
(比较expression式)和raw_value > 5.0
(比较expression式)进行比较。
所以,除非你的caseexpression式中的一个产生了一个等于11.0
的数字,或者你使用了switch
expression式,否则你将总是得到默认的情况。
只需使用一个简单的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; }
喜欢这个:
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
语句中的expression式将计算为true
或false
,如果符合switch
条件…voilà。 default
行为像一个else
。
奖金:您可以通过简单地将true
replace为false
来反转整个逻辑。 使用if ... else if
语句,您将不得不单独编辑每个if-clause。
不, 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; }
所以在你的情况下,最好使用第二个比第一个…
不要在家里尝试,或认真对待,这只是为了好玩。
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; } } } var width, height; conditionalSwitch( 5.1, function(val) { return val > 10 }, function () { height = 48; width = 36 }, function(val) { return val > 5 }, function () { height = 40; width = 30 }, //Default function(val) { return true }, function () { height = 16; width = 12; } ) console.log(width, height);