【发布时间】:2016-04-19 14:55:36
【问题描述】:
我注意到,当针对负指数数调用 toFixed 时,结果是一个数字,而不是一个字符串。
首先,让我们看一下规格。
Number.prototype.toFixed (fractionDigits)返回一个包含this Number value 的
String,以十进制定点表示法表示,小数点后有fractionDigits 位。如果 fractionDigits 为undefined,则假定为0。
实际发生的是(在 Chrome、Firefox、Node.js 中测试):
> -3e5.toFixed()
-300000
所以,返回值为-3e5。另外,请注意这 不是 字符串。这是一个数字:
> x = -3e5.toFixed()
-300000
> typeof x
'number'
如果我将输入括在括号中,它会按预期工作:
> x = (-3e5).toFixed()
'-300000'
> typeof x
'string'
为什么会这样?有什么解释?
【问题讨论】:
-
解析为
-(3e5.toFixed()) -
故事的寓意:对字面数字调用方法充满了危险。例如,
5.toFixed()是一个语法错误。使用括号或变量来避免陷入陷阱。 (你可以用5..toFixed()做5.toFixed()的事情,但是......不要这样做。Parens 很好而且可靠:(5).toFixed()。) -
@T.J.Crowder 当然,我只是好奇发生了什么。 :-)
标签: javascript node.js tofixed