比较为零的有效方法
Efficient way to compare to zero
条件:有一个循环,如果某个数字变量(即moreThanZero
)不是零(通常大于…),我会做一些事情。许多循环,比如说超过一百万,什么是最有效/最快速的比较方法:
if ( !moreThanZero ) { ... }
if ( moreThanZero > 0 ) { ... }
if ( moreThanZero != 0 ) { ... }
if ( moreThanZero !== 0 ) { ... }
感谢@torazaburo
if ( 0 !== moreThanZero ) { ... }
还是其他选择?
您可能是在进行微观优化,并且在大型程序中不太可能看到一次与零次比较的成本有任何重大差异。然而,为了科学。。。
调整@AbrahamAdam编写的基准测试,以防止最常见的优化(优化循环、删除变量写入等),而只调用黑洞(ish)函数,我看到了一个可能显著的区别:http://jsperf.com/comparetozero1/3
猜测为什么结果会如此:
!n
是测试的最小具体操作。至少,它必须(以某种方式)将变量视为布尔值。虽然可以进行一些优化,并且一些编译器可能足够聪明,可以使用非位或数字比较,但该语言允许做更多的工作。
===
和!==
明确不执行类型强制,因此它们可能可靠地快速,但需要注意的是,两个操作数必须是相同的类型,否则它们不相等。对于数字,这可能会变成一个整数比较,它应该映射到cmp
指令。
当已知两个操作数都是数值,尤其是整数时,>
可以利用优化,在现代浏览器中也可能利用优化。与常量(尤其是0)进行比较是一种理想的情况:有一条汇编指令可以与0进行比较。
http://jsperf.com/comparetozero1
差异似乎很小,我也会将类型与===进行比较,因为0==''是真正的
我假设您谈论的是循环,以及其中的比较变量。如果是,如果你想在数百万次迭代的循环中比较一个变量,我希望你更喜欢这样。
if ( moreThanZero > 0 )
{
// Your code goes here.......
}
因为,
if(!moreThanZero){//Do something}说Do somethink if moreThanZero不为零。这并不意味着更多ThanZero大于零,它也可能小于零。。if(moreThanZero!=0){…}也将因相同原因被丢弃。因此,如果(moreThanZero>0){…..}可能是您所期望的答案。
- 在jQuery中创建向下滑动子菜单的最有效方法
- 使用Underscore.js修改json数组中所选元素的更有效方法
- 选择具有值数组的所有元素的最有效方法
- 将JSON存储和恢复到此Ionic应用程序的最有效方法
- 将javascript数组中的项移动到特定位置的有效方法
- 将JS对象数组转换为嵌套形式的最有效方法
- 隐藏具有特定类$.each、for等的元素的有效方法
- 什么's是调用具有可变参数的函数的有效方法
- 选择具有特定数据的所有 html 标记的最有效方法是什么 - [适当性],无论值如何
- 使用 jQuery 调用 PHP 端点的最有效方法
- 这是解析 Int 的有效方法吗?
- 在JavaScript中搜索数组映射的最有效方法
- 获取字符串中最后一个换行符的最有效方法是什么
- 什么's是在两个(或多个)阵列中找到匹配的细胞序列的最有效方法
- 什么's是在IE8+中添加元素的最有效方法
- 从任何jquery选择器字符串创建元素的最有效方法
- 在日期范围内查找丢失日期的最有效方法是什么
- 对区间[1,10^12]中的整数进行编码/解码的快速有效方法是什么
- 在条件(if)结构的条件语句中是否有定义变量的有效方法
- 在ASP.NET中使用JQuery UI自动完成的有效方法