5

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

首先,让我们看一下规格。

Number.prototype.toFixed (fractionDigits)

返回一个String包含此 Number 值的十进制定点表示法,小数点后有fractionDigits位。如果fractionDigitsundefined,0则假定。

实际发生的是(在 Chrome、Firefox、Node.js 中测试):

> -3e5.toFixed()
-300000

所以,返回值为-3e5。另外,请注意这不是字符串。它是一个数字:

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

如果我将输入括在括号中,它将按预期工作:

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

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

4

2 回答 2

6

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

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

于 2016-04-19T14:59:19.910 回答
5

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

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

于 2016-04-19T14:59:59.527 回答