3.toFixed(5)
,则存在语法错误。使用双点,放置空格,将三个放在括号中或使用括号表示法可以使其正常工作。
3..toFixed(5)
3 .toFixed(5)
(3).toFixed(5)
3["toFixed"](5)
为什么单点表示法不起作用以及我应该使用其中一种替代方法?
#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
之类的东西的需求并不多。
评论
请注意,问题仅在整数文字时出现-小数点很高兴调用任何方法。 3.14.toFixed(2)。@kennebec好点,我编辑了问题标题,说的是整数而不是数字。
相关(如果不是重复的话):为什么数字文字不能访问Number方法?
数字文字的Calling成员函数的可能重复项,因为JavaScript中toString的较早用法也作为它的重复项而被关闭,但到目前为止,此问题和其他问题尚未链接。