调用负指数数字的.toFixed()返回一个数字,而不是字符串

时间:2016-04-19 14:55:36

标签: javascript node.js tofixed

我注意到,当针对负指数数字调用toFixed时,结果是数字,而不是字符串。

首先,我们来看看规格。

  

Number.prototype.toFixed (fractionDigits)

     

返回一个String,其中包含以小数点定点表示的this Number value,小数点后的 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'

为什么会这样?解释是什么?

2 个答案:

答案 0 :(得分:6)

我想这是因为成员('。')运算符的优先级高于符号运算符。

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Operator_Precedence

答案 1 :(得分:5)

这里发生的是操作顺序。让我们分解一下:

首先将要发生的是3e5将返回一个数字(300000),然后将调用toFixed,将其转换为字符串,然后将执行sign运算符,将字符串强制转换回一个数字。