.toFixed() 调用负指数 returns 一个数字,而不是一个字符串
.toFixed() called on negative exponential numbers returns a number, not a string
我注意到当针对负指数调用 toFixed
时,结果是一个数字,而不是字符串。
首先,让我们看一下规格。
Number.prototype.toFixed (fractionDigits)
Return a String
containing this Number value represented in decimal fixed-point notation with fractionDigits digits after the decimal point. If fractionDigits is undefined
, 0
is assumed.
实际发生的是(在 Chrome、Firefox、Node.js 中测试):
> -3e5.toFixed()
-300000
所以,返回值为-3e5
。另外,请注意这是 不是 字符串。这是一个数字:
> x = -3e5.toFixed()
-300000
> typeof x
'number'
如果我将输入括在括号中,它会按预期工作:
> x = (-3e5).toFixed()
'-300000'
> typeof x
'string'
为什么会这样?怎么解释?
我猜这是因为与符号运算符相比,成员 ('.') 运算符的优先级更高。
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
这里发生的是操作顺序。让我们分解一下:
首先要发生的是3e5要return一个数字(300000),然后调用toFixed in,把它变成一个字符串,然后执行符号运算符, 将字符串强制变回数字。
我注意到当针对负指数调用 toFixed
时,结果是一个数字,而不是字符串。
首先,让我们看一下规格。
Number.prototype.toFixed (fractionDigits)
Return a
String
containing this Number value represented in decimal fixed-point notation with fractionDigits digits after the decimal point. If fractionDigits isundefined
,0
is assumed.
实际发生的是(在 Chrome、Firefox、Node.js 中测试):
> -3e5.toFixed()
-300000
所以,返回值为-3e5
。另外,请注意这是 不是 字符串。这是一个数字:
> x = -3e5.toFixed()
-300000
> typeof x
'number'
如果我将输入括在括号中,它会按预期工作:
> x = (-3e5).toFixed()
'-300000'
> typeof x
'string'
为什么会这样?怎么解释?
我猜这是因为与符号运算符相比,成员 ('.') 运算符的优先级更高。
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
这里发生的是操作顺序。让我们分解一下:
首先要发生的是3e5要return一个数字(300000),然后调用toFixed in,把它变成一个字符串,然后执行符号运算符, 将字符串强制变回数字。