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

Ion*_*zău 6 javascript node.js tofixed

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

首先,我们来看看规格.

Number.prototype.toFixed (fractionDigits)

返回String包含十进制定点表示法的数字值,小数点后面的fractionDigits数字.如果是fractionDigitsundefined,0则假设.

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

> -3e5.toFixed()
-300000
Run Code Online (Sandbox Code Playgroud)

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

> x = -3e5.toFixed()
-300000
> typeof x
'number'
Run Code Online (Sandbox Code Playgroud)

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

> x = (-3e5).toFixed()
'-300000'
> typeof x
'string'
Run Code Online (Sandbox Code Playgroud)

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

lip*_*ipp 7

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

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


Geo*_*lah 5

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

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