.toFixed()在负指数上调用时返回一个数字,而不是一个string

我注意到,当调用toFixed负指数数字时,结果是一个数字,而不是一个string。

首先,让我们看看规格。

Number.prototype.toFixed (fractionDigits)

返回一个String其中包含以十进制定点表示法表示的Number值 ,小数点后的分数位数。 如果fractionDigits undefined ,则假定为0

实际情况是(在Chrome,Firefox,Node.js中testing):

 > -3e5.toFixed() -300000 

所以,返回的值是-3e5 。 另外,请注意,这不是一个string。 这是一个数字:

 > x = -3e5.toFixed() -300000 > typeof x 'number' 

如果我用圆括号包装input,它按预期工作:

 > x = (-3e5).toFixed() '-300000' > typeof x 'string' 

为什么发生这种情况? 什么是解释?

我想这是因为与符号运算符相比,成员('。')运算符的优先级更高。

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

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

首先会发生的事情是,3e5将返回一个数字(300000),然后toFixed将被调用,将其转换为一个string,然后符号运算符将被执行,强制string回到一个数字。