为什么要在 JavaScript 方程式前面加号与 toFixed

Why plus sign in front of JavaScript equation with toFixed?

本文关键字:toFixed 前面 方程式 JavaScript 为什么      更新时间:2023-09-26

我只是在浏览粒子的源代码.js并遇到了以下代码行:

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

这行代码也可以在这里找到。

现在,表达式开头的 + 号在等式中没有区别。 例如

(-2 + 5) = 3

现在。。。

+(-2 + 5) = 3 

再比如:

(-5 + 2) = -3

现在。。

+(-5 + 2) = -3

为什么表达式开头的加号对等式的结果没有影响?

你的代码基本上是

x = +someNumber.toFixed(2);

这是

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

因为函数调用的优先级高于 + 运算符。

这使得

x = +(someNumberFormattedAsARoundedString);

应用一元加号运算符会将字符串转换回数字。最终结果是初始someNumber四舍五入

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

.toFixed() 返回一个字符串。您需要将其转换为数字。一元加 + 运算符用于将字符串转换/转换为数字。

返回

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

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

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

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