我有一段像这样的javascript代码
if(prog > 100)
prog = 100;
else if(prog <0)
prog = 0;
else if(typeof prog != 'number')
prog = 0;
看起来很糟糕和丑陋。有没有更酷的方式在javascript中写这个?
答案 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));
答案 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
,否则它会确保它在0
和100
之间,这似乎是您真正想要的逻辑。< / p>