为什么可以't我访问一个带单点的整数的性质

Why can't I access a property of an integer with a single dot?

本文关键字:一个 单点 整数 访问 为什么      更新时间:2023-09-26

如果我尝试写入

3.toFixed(5)

存在语法错误。使用双点、放入空格、将三个放在括号中或使用括号符号可以使其正常工作。

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

为什么单点表示法不起作用?我应该使用这些替代方案中的哪一个?

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

(3.)toFixed(5)

这自然会产生语法错误,因为您不能立即在数字后面加上标识符。

任何防止句点被解释为数字的一部分的方法都是有效的。我认为最清楚的方法是在数字周围加括号:

(3).toFixed(5)

您无法访问它,因为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。

它不起作用,因为JavaScript将3.解释为浮点常量(如3.5)的开头,或者是整个浮点常量(与3. == 3.0一起),所以不能在它后面加标识符(在您的情况下,是属性名)。它没有意识到您打算将3.作为两个独立的令牌。

你的任何解决方案对我来说都很好。

这是Javascript语法中的一个歧义。当解析器得到一些数字,然后遇到一个点时,它可以在"NumberLiteral"(如3.5)或"MemberExpression"(如3.foo)之间做出选择。我想这种模糊性不能通过前瞻性来解决,因为科学的表示法-3.e2应该解释为300还是a property e2 of 3?因此,他们自愿决定在这里更喜欢NumberLiteral,因为实际上对3.foo这样的东西没有太多需求。

正如其他人所提到的,Javascript解析器将Integer文本后面的点解释为小数点,因此它不会调用Number对象的方法或属性。

要显式通知JS解析器调用Integer文本上的属性或方法,可以使用以下任何选项:


双点符号

3..toFixed()

用空格分隔

3 .toFixed()

将整数写成十进制

3.0.toFixed()

用括号括起来

(3).toFixed()

分配给常量或变量

const nbr = 3;
nbr.toFixed()