javascript中检查变量范围的if(a>;b)的有效替代方法

javascript中检查变量范围的if(a>;b)的有效替代方法,javascript,performance,coding-style,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'; var-blah; 如果(a>10)blah='large'; 如果(a5)blah=‘中等’; 如果(a=0)blah='small'; 是否有一种更优雅、更简洁的方法来实现

我希望标题不要太笼统,也不要误导

var blah;
if(a > 10) blah = 'large';
if(a <= 10 && a > 5) blah = 'medium';
if(a <= 5 && a >= 0) blah = 'small';
var-blah;
如果(a>10)blah='large';
如果(a5)blah=‘中等’;
如果(a=0)blah='small';

是否有一种更优雅、更简洁的方法来实现范围检查?

是的,使用
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
var-blah=
a>10?“大':
a>5?“中’:
a>=0?“小':
未定义;//可能需要为<0选择更好的默认值

您可以使用
三元运算符

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';
}
var范围=[[10,'大'],
[5,‘中等’],
[0,'小']];
函数范围(n){
对于(var i=0;i范围[i][0]){
返回范围[i][1];
}
}
返回“默认值”;
}

这不是那么灵活,因为您不能为每种情况指定是否使用
如果范围是常数,您可以使用组合开关语句和模。
例如


当然,它只能在每个范围之间的差异相等时使用。

我很好奇。如果最有可能的“真实”结果出现在第一位,会对性能产生影响吗?例如,如果大多数数据都在“中等”范围内,那么将其作为if-else/if块中的第一个条件是否有意义?@GMastros这是正确的。没有逻辑上的差异,但可能有一点性能上的差异。@GMastros您不能先检查中间值。它将捕获大的和中等的(例如,20的值将被检测为中等)@PeteScott我认为GMastros意味着OP代码中的中等检查:
a5
@Paulpro.Ah。很可能。谢谢这是一个有趣的想法。在我想处理的特定案例中,我付出了更多的努力,但这绝对是一个很好的可扩展概念。
var blah;
switch(a-(a % 5)) {
    case 10:
        blah = 'large';
        break;
    case 5:
        blah = 'medium';
        break;
    case 0:
        blah = 'small';
        break;
    default:
        blah = 'large';
}