Javascript 对数字文本调用toFixed方法

Javascript 对数字文本调用toFixed方法,javascript,tofixed,Javascript,Tofixed,当我对十进制数文本调用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

当我对十进制数文本调用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

发动机罩下发生了什么?

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

这适用于
67.678.toFixed(2)
的原因是没有其他选项。解析器可以无歧义地推断出数字文字以“8”位结束,并可以继续解析下一个点作为属性访问器(这会首先导致装箱到
number
对象中)

解决方案显然很简单:

(67).toFixed(2);

这是一个与语言相关的语法问题。写入
xx.
时,如果
xx
是数字,则假定
运算符后面出现的下一个数字是另一个数字。但是如果你用括号括起来,比如(xx).toFixed(2),它是有效的。在后面的对象中发生的是在括号分隔解析之后的对象,或者在创建完整的十进制文本并对该对象调用
toFixed
时的对象

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

您的选择包括:

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

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

您是否尝试过
(67)。toFixed(2)
?这是一个与语言相关的语法问题。写入
xx.
时,如果
xx
是数字,则假定
运算符后面出现的下一个数字是另一个数字。但是如果你把它括在parans中,比如
(xx)。toFixed(2)
,它是有效的。那么为什么十进制数不需要括号呢?我已经学习了编程语言构造课程。这些是与语法相关的规则。当一条语句出现时,一组语法规则将对其进行解析并验证。。可能在JS语法规则中,你不能放入
number.function
,它返回一个解析/语法错误否,括号中没有“创建对象”。为了解析的目的,他们对数字进行了分隔。虽然这可能是一种可能性,但我猜一个对象被创建了。将
链接到fixed
方法调用。由于该方法的定义可能不符合JS languageYes的语法或语义规则,因此会创建一个临时对象来调用
toFixed
。但是,在任何情况下都会创建这样的对象,包括
67.0.toFixed()
。您声明了括号创建对象。这是不正确的。不要忘记编号。原型。固定。呼叫(67,2)和朋友(绑定,应用…)