我刚刚浏览了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
为什么表达式开头的加号与等式的结果没有区别?
答案 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浮点数,这看起来像不良做法。看起来作者试图获得固定的精确数字,从而混淆数字存储及其表示(即格式化)。