条件:如果某个数字变量(即moreThanZero
)不是零(通常大于......),我会做一个循环。许多周期,比如超过一百万,最有效/快速的比较方法是什么:
if ( !moreThanZero ) { ... }
if ( moreThanZero > 0 ) { ... }
if ( moreThanZero != 0 ) { ... }
if ( moreThanZero !== 0 ) { ... }
感谢@torazaburo
if ( 0 !== moreThanZero ) { ... }
或其他选择?
答案 0 :(得分:1)
http://jsperf.com/comparetozero1
这种差异似乎微不足道,但我会用===来比较类型,因为0 ==''是真的
答案 1 :(得分:1)
我假设你在谈论循环,并在其中有一个比较变量。 如果是这样, 如果你想在数百万次迭代的循环中比较一个变量,我希望你更喜欢这个。
if ( moreThanZero > 0 )
{
// Your code goes here.......
}
由于,
如果(!moreThanZero){//做某事} 说如果moreThanZero不为零则执行某些操作。它并不意味着更多的TanZero大于零,它也可能小于零。 if(moreThanZero!= 0){...} 也会因同样的原因被丢弃。 所以, if(moreThanZero> 0){.....} 可能是你期待的答案。
答案 2 :(得分:1)
您可能是微观优化,并且不太可能看到大型计划与一次比较的成本与零相比有任何重大差异。但是,为了科学......
调整@AbrahamAdam编写的基准以防止大多数常见的优化(优化循环,删除变量写入等),而只是调用黑洞(ish)函数,我发现可能存在显着差异:http://jsperf.com/comparetozero1/3
猜测结果为什么会以他们的方式结束:
!n
是经过测试的最不具体的操作。至少,它必须(以某种方式)将变量视为布尔值。虽然可以进行一些优化,并且某些编译器可能足够聪明,可以使用按位或非数字比较,但该语言允许完成更多工作。
===
和!==
明确地不执行类型强制,因此它们可能是可靠的快速,但需要注意两个操作数必须是相同的类型或它们不相等。对于数字,这可能成为整数比较,应该向下映射到cmp
指令。
>
可能,并且在现代浏览器中可能会在已知两个操作数都是数字且特别是整数时利用优化。与常量(尤其是0)进行比较是一个理想的情况:存在一个与0比较的汇编指令。