如何在javascript中优化这个if-else语句

时间:2012-03-16 03:08:57

标签: javascript

我有一段像这样的javascript代码

        if(prog > 100)
          prog = 100;
        else if(prog <0)
          prog = 0;
        else if(typeof prog != 'number')
          prog = 0;

看起来很糟糕和丑陋。有没有更酷的方式在javascript中写这个?

6 个答案:

答案 0 :(得分:2)

prog = Math.max(0, Math.min(100, typeof prog == 'number' ? prog : 0));

答案 1 :(得分:2)

这个怎么样:

 foo = typeof foo == "number" ? foo : 0;
 foo.constrain(0, 100);

这只需要定义它:

Number.prototype.constrain = function(min, max) {
  return Math.min(max, Math.max(min, this.valueOf())); 
}

答案 2 :(得分:1)

prog =(prog&gt; 100?100:(prog&lt; 0 ||(typeof prog!='number')?0:prog));

jsfiddle

答案 3 :(得分:1)

if(typeof prog != 'number' || prog < 0){
    prog = 0;
} else if (prog > 100) {
    prog = 100;
}
  • 如果prog不是数字,或者小于0,则将设置为零
  • 如果prog大于100,则设置为100
  • 其他任何东西,只留下它

问题是您在将变量评估为数字而不知道它是一个数字(因为您最后放置了typeof检查)。如果我要将foo传递给prog,那么在检查类型之前,您需要评估2次。另外,您正在为0的相同输出评估两个条件,更好地合并它们。

JS在条件中看到OR时不会进一步评估TRUE。同样可以在AND看到FALSE时说出来。

答案 4 :(得分:0)

你真的应该先测试一下这个类型:

if ( typeof prog != 'number' || prog < 0 )
   prog = 0;
else if( prog > 100 )
   prog = 100;

双三元:

prog = typeof prog != 'number'?0:prog;
prog = (prog>100)?100:((prog<0)?0:prog);

答案 5 :(得分:0)

这是我的看法。它在功能上是等同的,简洁的,但是当你从现在起12个月后回到代码时,它并不清晰。

prog = (typeof prog != 'number' || prog < 0 ? 0 : (prog > 100 ? 100 : prog));

更新

以下是其他几种方法。

prog = (typeof prog != 'number' ? 0 : Math.max(0,Math.min(prog, 100)));
prog = (typeof prog != 'number' || prog < 0 ? 0 : Math.min(prog, 100));

我认为这两个中的第一个可能是最容易理解的。基本上,如果它不是一个数字,它会将其设置为0,否则它会确保它在0100之间,这似乎是您真正想要的逻辑。< / p>