为什么用toFixed在JavaScript方程式前加号?

时间:2016-01-26 08:19:52

标签: javascript

我刚刚浏览了particle.js的源代码,并遇到了以下代码行:

this.speed.x = +((-options.maxSpeedX / 2) +
    (Math.random() * options.maxSpeedX)).toFixed(2);

这段代码也可以找到 HERE

现在表达式开头的+符号在等式中没有区别。 E.g。

(-2 + 5) = 3

现在...

+(-2 + 5) = 3 

另一个例子:

(-5 + 2) = -3

现在..

+(-5 + 2) = -3

为什么表达式开头的加号与等式的结果没有区别?

2 个答案:

答案 0 :(得分:2)

.toFixed()会返回字符串。您需要将其强制转换为Number。 unary plus + operator用于将字符串转换/转换为数字。

  

<强>返回

     

numObj的字符串表示形式,它不使用指数表示法,并且在小数位后面具有正确的数字位数。如有必要,数字将四舍五入,如果需要,小数部分用零填充,以使其具有指定的长度。如果numObj大于1e + 21,则此方法只调用Number.prototype.toString()并以指数表示法返回一个字符串。

在结果已经是数字的情况下不需要。例如,+(-2 + 5)

但是,在以下操作中,它是必需的。

this.speed.x = +((-options.maxSpeedX / 2) +
    (Math.random() * options.maxSpeedX)).toFixed(2);

答案 1 :(得分:2)

您的代码基本上是

cb.upsert('hello',{'hi':'there'},ttl=10)
cb.upsert('hello',{'hi':'there'})

哪个是

x = +someNumber.toFixed(2);

因为the function call has a higher precedence than the + operator

这使得

x = +(someNumber.toFixed(2));

应用unary plus operator将字符串转换回数字。最终结果是初始x = +(someNumberFormattedAsARoundedString); 舍入

在您链接的特定情况下,由于忽略了什么是IEEE754浮点数,这看起来像不良做法。看起来作者试图获得固定的精确数字,从而混淆数字存储及其表示(即格式化)。