2

当我在十进制数字文字上调用 toFixed() 方法时,如下所示:

var a = 67.678.toFixed(2);
console.log(a);

结果有效并返回 67.68

但是,如果我在整数上调用该方法 - 我会收到错误

var b = 67.toFixed(2);
console.log(b); // causes ERROR

为什么会这样?

注意:

如果我将整数保存到变量中 - toFixed() 方法确实有效。

var c = 67;
c = c.toFixed(2);
console.log(c); // returns 67.00

看到这个 jsBin

引擎盖下发生了什么?

4

3 回答 3

6

var b = 67.toFixed(2);只需生成一个解析错误,因为解析器无法推断出您的意思是它是一个数字文字,后跟一个属性访问器(请注意,错误在第一行,而不是在console.log(b)

这样做的原因67.678.toFixed(2)是没有其他选择。解析器可以毫不含糊地推断出数字文字以“8”位结束,并且可以继续将下一个点解析为属性访问器(这会导致Number首先装箱到对象中)。

一个解决方案显然很简单:

(67).toFixed(2);
于 2015-10-14T07:37:32.900 回答
3

您的选择包括:

67 .toFixed(2)
(67).toFixed(2)
67..toFixed(2)
67.0.toFixed(2)
67["toFixed"](2)

所有这些都避免了 JS 解析器将紧跟数字的点视为小数点的问题。

于 2015-10-14T07:48:10.597 回答
1

好吧,它是与语言相关的语法问题。当您编写xx.if is number 时,它假定在运算符是另一个数字xx之后出现的下一件事。.但是如果你把它括在括号中,比如 (xx).toFixed(2) ,它就可以工作。后面发生的事情是在括号分隔解析之后或在写入完整的十进制文字时创建并toFixed在该对象上调用的对象。

希望它能回答我们的问题.. :)

于 2015-10-14T07:43:21.260 回答