Javascript 使变量值为正

Javascript 使变量值为正,javascript,math,Javascript,Math,我有一个变量,有时是负的,有时是正的 在我使用它之前,我需要使它积极。我如何才能做到这一点?使用该方法 if (myvar < 0) { myvar = -myvar; } 下面有一条关于使用否定的评论(感谢Kelly让我想到这一点),如果您对Math.abs函数进行局部引用(没有局部引用Math.abs则速度要慢得多),那么在大量转换过程中,它比Math.abs要快一些 有关更多详细信息,请参阅。在较小的数字上,差异可以忽略不计,我认为Math.abs是一种更干净的“自我记录”代码

我有一个变量,有时是负的,有时是正的

在我使用它之前,我需要使它积极。我如何才能做到这一点?

使用该方法

if (myvar < 0) {
  myvar = -myvar;
}
下面有一条关于使用否定的评论(感谢Kelly让我想到这一点),如果您对
Math.abs
函数进行局部引用(没有局部引用
Math.abs
则速度要慢得多),那么在大量转换过程中,它比
Math.abs
要快一些


有关更多详细信息,请参阅。在较小的数字上,差异可以忽略不计,我认为Math.abs是一种更干净的“自我记录”代码的方法

这不是jQuery实现,而是使用Javascript中的数学库


x=Math.abs(x)

或者,如果要避免函数调用(和分支),可以使用以下代码:

x = (x ^ (x >> 31)) - (x >> 31);
它有点“黑”,而且在某些奇怪的方面看起来不错:)但我仍然坚持使用
Math.abs
(只是想展示另一种方法)

顺便说一句,只有当底层javascript引擎将整数存储为32位时,这才有效,这在我的机器上的firefox 3.5中是如此(32位,因此它可能无法在64位机器上工作,尚未测试…)

这两种选择之间(以@Kooilnc为例):


跟着第二个(否定)走。它不需要函数调用,CPU只需很少的指令即可完成。快速、简单、高效。

如果您不想使用Math.Abs,您可以使用以下简单的If语句:p

if (x < 0) {
    x = -x;
}
if(x<0){
x=-x;
}
当然你可以把它变成这样的函数

function makePositive(number) {
    if (number < 0) {
        number = -number;
    }
}
函数makePositive(数字){
如果(数字<0){
数字=-数字;
}
}
使正(-3)=>3 使正(5)=>5


希望这有帮助!Math.abs可能对您有用,但如果它没有这么小

那么将-myvar设置为-900这样的值会使其为-900或900的负值?负值为正值。所以-(-900)=900。是的,因为两个负数等于一个正数。我会用Math.abs()思维者,那是数学,不是编程。用否定代替。不需要函数调用。我必须同意这里的@Kevin。虽然“a=-a;”是明确的,但它仍然会在包括开发人员在内的一些人中引发数学恐惧症。abs()似乎说了同样的话,但使用了大脑的不同部分。我不会评论Math.abs(),但我可能会评论“a=-a”。这很旧,但我想指出的是,如果您不知道变量是正的还是负的,并且不想使用if语句进行检查,那么您会使用abs而不仅仅是对变量进行否定。@cwallenpole不是每个人都知道“绝对值”这个术语.@callum但每个程序员都应该。当然,这是另一种方式。但不清楚你在做什么,可读性不如Math.abs,如果这还不够的话,它也比Firefox3.6上的Math.abs(x)慢。如果必须使事情复杂化,请使用
x<0-x:x
(在其他经过测试的浏览器中速度最快)。你的代码在Opera 10.63中慢了1%,在Chrome 6.0中慢了12%,在IE8中慢了20%。好极了!并非每个解决方案都需要使用jQuery。很棒的库,但使用过度。Math由JS引擎进行了大量优化,我认为它不会比第二个选项慢。我想知道编译器如何优化Math.abs()调用,有人想看看并与我们分享吗?确认
Math.abs
在Chrome:@KellyS.French上的速度快了近10倍。我认为
Math.abs
只是将第一位设置为0,没有任何条件,因为JS数字是作为浮点实现的。@Derek朕會功夫 当数字开始为负数时,这不会弄乱2的补码吗?
var negative = -23, 
    positive = -negative>0 ? -negative : negative;
if (x < 0) {
    x = -x;
}
function makePositive(number) {
    if (number < 0) {
        number = -number;
    }
}