当我在十进制数字文字上调用toFixed()方法时,如下所示:
var a = 67.678.toFixed(2);
console.log(a);
结果有效并返回67.68
但是如果我在整数上调用方法 - 我会收到错误
var b = 67.toFixed(2);
console.log(b); // causes ERROR
为什么会这样?
NB:
如果我将整数保存到变量 - toFixed()方法确实有效。
var c = 67;
c = c.toFixed(2);
console.log(c); // returns 67.00
请参阅this jsBin
引擎盖下发生了什么?
答案 0 :(得分:5)
var b = 67.toFixed(2);
简单地生成一个解析错误,因为解析器无法推断出你的意思是它是一个数字文字后跟一个属性访问器(注意错误在第一行,而不是在console.log(b)
)
这适用于67.678.toFixed(2)
的原因是没有其他选择。解析器可以毫不含糊地推断出数字文字在" 8"数字,并可以继续解析下一个点作为属性访问器(这导致首先拳击进入Number
对象BTW。)
解决方案显然很简单:
(67).toFixed(2);
答案 1 :(得分:3)
您的选择包括:
67 .toFixed(2)
(67).toFixed(2)
67..toFixed(2)
67.0.toFixed(2)
67["toFixed"](2)
所有这些都避免了JS解析器将数字紧跟在数字后面作为小数点处理的问题。
答案 2 :(得分:1)
这是一个语言相关的语法问题。如果xx.
是xx
,那么当您编写.
时,它会假定在toFixed
运算符是另一个数字之后出现下一个内容。但是如果你把它括在括号中,如(xx).toFixed(2)就可以了。后面发生的是括号在分隔解析后或写入完整的十进制文字并且在该对象上调用float:left
时的对象。
希望它能回答我们的问题.. :)