【发布时间】:2013-07-10 23:30:05
【问题描述】:
我希望标题不要太笼统或误导。
var blah;
if(a > 10) blah = 'large';
if(a <= 10 && a > 5) blah = 'medium';
if(a <= 5 && a >= 0) blah = 'small';
难道没有更优雅、更简洁的方式来实现范围检查吗?
【问题讨论】:
标签: javascript performance coding-style
我希望标题不要太笼统或误导。
var blah;
if(a > 10) blah = 'large';
if(a <= 10 && a > 5) blah = 'medium';
if(a <= 5 && a >= 0) blah = 'small';
难道没有更优雅、更简洁的方式来实现范围检查吗?
【问题讨论】:
标签: javascript performance coding-style
是的,使用else 子句:
var blah;
if(a > 10){
blah = 'large';
}else if(a > 5){
blah = 'medium';
}else if(a >= 0){
blah = 'small';
}
由于您在每个语句中都进行了简单的赋值,因此使用三元表达式也很优雅,尽管许多人会认为这不太可读:
var blah =
a > 10 ? 'large' :
a > 5 ? 'medium' :
a >= 0 ? 'small' :
undefined; // May want to choose a better default value for a < 0
【讨论】:
a <= 10 && a > 5
您可以使用ternary operators
var blah;
blah = a > 10 ? 'large' : (a > 5 ? 'medium' : 'small' ) ;
【讨论】:
如果你有很多范围间隔,你可以这样做:
var ranges = [[10, 'large'],
[5, 'medium'],
[0, 'small']];
function range(n) {
for (var i = 0; i < ranges.length; i++) {
if (n > ranges[i][0]) {
return ranges[i][1];
}
}
return 'default value';
}
这不是那么灵活,因为您不能为每种情况指定是使用< 还是<=,但是如果我有很多范围,我可能会写这样的东西。其他答案很好,只是想我会添加这个作为一个想法。
【讨论】:
如果范围是常数,您可以使用组合 switch 语句和取模。 例如。
var blah;
switch(a-(a % 5)) {
case 10:
blah = 'large';
break;
case 5:
blah = 'medium';
break;
case 0:
blah = 'small';
break;
default:
blah = 'large';
}
当然,它只能在每个范围之间的差异相等时使用。
【讨论】: