.toFixed()在负指数上调用时返回一个数字,而不是一个string
我注意到,当调用toFixed
负指数数字时,结果是一个数字,而不是一个string。
首先,让我们看看规格。
Number.prototype.toFixed (fractionDigits)
返回一个
String
其中包含以十进制定点表示法表示的Number值 ,小数点后的分数位数。 如果fractionDigitsundefined
,则假定为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回到一个数字。