快速并省去了在JavaScript中删除有关数字的符号的方法

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的按位运算建议在某些情况下可能会更快,但也会删除小数位,因此对我不起作用.

Dav*_*ini 7

你可以使用Math.abs(). 它返回数字的绝对值


Juv*_*uve 5

由于没有出现更好的答案,我将自己总结这个答案中的发现。

  1. if(n < 0) n *= -1是目前最好的选择。它在大多数平台上都表现得相当好并且非常可读。它还保留小数部分。
  2. 其他变体(例如n = Math.abs(n))在其他平台上可能会更快。但收益通常只有几个百分点。您可以考虑预先检测浏览器/平台并构建使用一种或另一种变体的依赖于平台的代码。这可以为您在每个平台上提供最佳性能,但会带来大量开销。
  3. 考虑按位运算符时要小心,它们在某些平台上可能会更快,但可能会更改程序的语义(删除小数)。

  • 我认为当今删除该标志的最佳方法是使用 Math.abs (2认同)

Nik*_*hil -2

您还可以使用 n=Math.sqrt(n^n)