在Javascript中获取一个数的绝对值

68
我想在JavaScript中获取一个数的绝对值。也就是说,去掉符号。 我知道从数学上讲,可以通过平方该数字然后取平方根来实现这一点,但我也知道这种方法效率非常低下。

x = -25
x = x * x 
x = Math.sqrt(x)
console.log(x)

在JavaScript中,是否有一种比数学方法更有效的方式来简单地删除数字的符号?


8
Math.abs(-25); // 25翻译:Math.abs(-25); // 25 的意思是取 -25 的绝对值,结果为 25。 - davin
13
还没有人建议使用正则表达式吗?;-) 或者 jQuery.abs()? - Tomasz Nurkiewicz
6个回答

123
你是指获取一个数字的绝对值吗? Math.abs JavaScript函数就是为此设计的。

var x = -25;
x = Math.abs(x); // x would now be 25 
console.log(x);

以下是来自文档的一些测试用例:
Math.abs('-1');     // 1
Math.abs(-2);       // 2
Math.abs(null);     // 0
Math.abs("string"); // NaN
Math.abs();         // NaN

16

这里有一种快速获取数值绝对值的方法。它适用于任何编程语言:

x = -25;
console.log((x ^ (x >> 31)) - (x >> 31));


16
这是否假设了一个32位的数字? - Dan Walmsley
JavaScript 不使用 64 位(双精度)数字吗? - Derek 朕會功夫
1
@Derek朕會功夫 我相信在操作期間,二進制運算符會隱式地將JS數字類型轉換為32位有符號整數。例如:(Math.pow(2,32)-1)|0 === -14294967295 不同。 - Patrick Roberts
@PatrickRoberts 刚刚阅读了 ECMA 规范,显然有些运算符将数字转换为带符号的 32 位整数,而其他一些运算符将数字转换为无符号的 32 位整数。 - Derek 朕會功夫

9

如果你想了解JavaScript如何在幕后实现这个功能,可以查看这篇文章。

博客文章

以下是基于Chromium源代码的实现。

function MathAbs(x) {
  x = +x;
  return (x > 0) ? x : 0 - x;
}

console.log(MathAbs(-25));


2
@AndreFigueiredo - 我认为这个回答非常好,虽然有点简洁。它建议您可以使用 absx=Math.abs(x); 或者创建一个函数(MathAbs),甚至直接使用 absx=(x > 0) ? x : 0 - x;。也许在答案中添加类似的语句会更有帮助。 - Kevin Fegan


3

替代方案

Math.max(x,-x)

let abs = x => Math.max(x,-x);

console.log( abs(24), abs(-24) );

此外,Rick的回答也可以简化为 x>0 ? x : -x


0
仅仅是去掉一个数字的符号。
var x = -25;
+`${x}`.replace('-', '');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接