1.toString()Javascript中的SyntaxError

时间:2012-10-03 03:45:59

标签: javascript

为什么下面的第一行会出错,尽管第二行和第三行工作正常?

1.toString(); // SyntaxError
(1).toString(); // OK
1['toString'](); // OK

4 个答案:

答案 0 :(得分:11)

解析器正在尝试将1.视为浮点文字的开头 - 只有toString将其转换为无效数字。

与:比较:

1.0.toString()

答案 1 :(得分:11)

.存在歧义。它是小数,还是属性访问器?

解释器将其视为小数,因此您可以使用..同时允许小数,然后使用属性语法。

1..toString();

或者使用您展示的其他方式来解决歧义。

答案 2 :(得分:0)

(1).toString()中,(1)强制它在.toString()之前进行评估,以便它可以工作。 在1.toString()中,1不是有效的标识符,因此不起作用。

答案 3 :(得分:0)

在Javascript中,可以通过以下两种方式之一来解释使用点(.):

  1. 作为Property Accessor(例如var prop = myObject.prop;)。
  2. 作为Floating-point Literal(例如var num = 1.5;)的一部分。

在上述情况下,1.中的前导1.toString()被解释为浮点数,因此出现错误:

  

SyntaxError:标识符在数字文字(learn more)之后立即开始

如果尝试声明一个以数字开头的变量,您将遇到相同的错误:var 1person = 'john';

要防止解释器将1.视为小数,而是将其视为访问我们的文字1上的属性,有几种方法可以实现:

// Via white-space after the numeric literal
1 .toString();

1
.toString();

// Via a grouping-operator, aka, parentheses
// @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators#Grouping_operator
(1).toString();

// Via an additional dot. Made clearer with parentheses as `(1.).toString()`
1..toString();

// Via an explicit fractional part (because `1. === 1.0`)
1.0.toString();

// Via bracket notation
1['toString']();
1.['toString']();
1.0['toString']();