Javascript:获得零下限的最有效方法是什么?

时间:2012-07-02 04:52:55

标签: javascript performance

获得零下限的最有效(最快)方法是什么?

Math.max(0,x)将起作用,对于x的任何负值都返回0。但是,我对Math。*的经验是,通常有更高效的技巧。在这种情况下,任何人都知道吗?

按位技巧很好;我总是喜欢找那些运营商的真正用途。如果x为负数,那么任何返回false的东西都可以。

编辑 为了澄清,如果x大于0,我想要那个值。所以我不能只做x< 0,因为那只会给我真实,而不是x。

3 个答案:

答案 0 :(得分:2)

Math.Max(x, y)基本上与例如x > y ? x : y。当false为否定时返回x应该同样简单:return x < 0 ? false : x

答案 1 :(得分:2)

满足您要求的一种方式是:

x > 0 && x

鉴于当false为0或为负时,您可以使用表达式评估为x。如果您只想在false为否定时x,则可以执行以下操作:

x >= 0 && x

示例:

3 > 0 && 3;     // result: 3
-1 > 0 && -1;   // result: false
0 > 0 && 0;     // result: false

0 >= 0 && 0;    // result: 0

答案 2 :(得分:1)

查看最小/最大的Bit Twiddling Hacks部分

以下是他们在C ......中的例子。

int x;  // we want to find the maximum of x and y
int y;   
int r;  // the result goes here 

r = x ^ ((x ^ y) & -(x < y)); 

适应JavaScript的微不足道......

var x, y, r;

r = x ^ ((x ^ y) & -(x < y));

jsFiddle

但是,除非你处于紧密循环(例如游戏循环)并且由于Math.max()而处于执行状态(并且简单的三元内联等效物不能提供所需的性能),否则我不会不要用这个小小的伎俩。对于任何阅读代码的人来说,它的作用并不明显,而且几乎肯定需要一个评论来解释,而Math.max()在其名称中是自我记录的(对大多数程序员来说)。