Juv*_*uve 6 javascript performance signed numbers jsperf
我想在JavaScript中删除数字的符号.以下是我在jsperf上检查过的测试用例(http://jsperf.com/remove-sign-from-number)
if(n < 0) n *= -1;
if(n < 0) n = -n;
n = Math.abs(n)
(n < 0) && (n *= -1)
(n < 0) && (n = -n)
n = Math.sqrt(n*n)
Run Code Online (Sandbox Code Playgroud)
根据这些测试:if(n < 0) n *= -1似乎是一个很好的解决方案.
你知道更好,更省,更有效的方法吗?
编辑1:添加了Nikhil的Math.sqrt情况,但sqrt在大多数系统中通常都很慢.
编辑2: Jan的按位运算建议在某些情况下可能会更快,但也会删除小数位,因此对我不起作用.
由于没有出现更好的答案,我将自己总结这个答案中的发现。
if(n < 0) n *= -1是目前最好的选择。它在大多数平台上都表现得相当好并且非常可读。它还保留小数部分。n = Math.abs(n))在其他平台上可能会更快。但收益通常只有几个百分点。您可以考虑预先检测浏览器/平台并构建使用一种或另一种变体的依赖于平台的代码。这可以为您在每个平台上提供最佳性能,但会带来大量开销。