如果我尝试编写

3.toFixed(5)


,则存在语法错误。使用双点,放置空格,将三个放在括号中或使用括号表示法可以使其正常工作。

3..toFixed(5)
3 .toFixed(5)
(3).toFixed(5)
3["toFixed"](5)


为什么单点表示法不起作用以及我应该使用其中一种替代方法?

评论

请注意,问题仅在整数文字时出现-小数点很高兴调用任何方法。 3.14.toFixed(2)。

@kennebec好点,我编辑了问题标题,说的是整数而不是数字。

相关(如果不是重复的话):为什么数字文字不能访问Number方法?

数字文字的Calling成员函数的可能重复项,因为JavaScript中toString的较早用法也作为它的重复项而被关闭,但到目前为止,此问题和其他问题尚未链接。

#1 楼

句点是数字的一部分,因此代码将解释为:

(3.)toFixed(5)


这自然会产生语法错误,因为您无法立即关注具有标识符的数字。

任何使句点不被解释为数字一部分的方法都可以使用。我认为最清楚的方法是在数字前后加上括号:

(3).toFixed(5)


#2 楼

由于JavaScript的令牌生成器存在缺陷,您无法访问它。 Javascript尝试将数字的点符号解析为浮点文字,因此您不能在其后加上属性或方法:

2.toString(); // raises SyntaxError

如前所述,有两种解决方法可以用来使数字文字也充当对象。其中任何一个都同样有效。

2..toString(); // the second point is correctly recognized
2 .toString(); // note the space left to the dot
(2).toString(); // 2 is evaluated first


要了解有关对象用法和属性的更多信息,请查看Javascript Garden。

评论


您的大多数答案实际上是在重复OP已经说过的话。 。 。

–ruakh
2012年2月21日15:25

但是他解释了它为什么起作用的原因,例如没有隐式转换在起作用。

–詹斯·绍德(Jens Schauder)
2012-2-21在15:29

#3 楼

这是行不通的,因为JavaScript将3.解释为浮点常量的开始(例如3.5)或整个浮点常量(使用3. == 3.0),因此您不能在标识符后跟(在您的情况下,为属性名称)。无法识别您打算将3.当作两个单独的令牌。

任何解决方法对我来说都很好。

#4 楼

这是Javascript语法中的歧义。当解析器得到一些数字然后遇到一个点时,它可以在“ NumberLiteral”(如3.5)或“ MemberExpression”(如3.foo)之间选择。我猜这种歧义无法通过科学记号提前解决-将3.e2解释为300还是a property e2 of 3?因此,他们自愿决定在这里首选NumberLiteral,因为实际上对3.foo之类的东西的需求并不多。