为什么10..toString()有效,但10.toString()不起作用?

时间:2012-10-30 23:52:48

标签: javascript syntax

  

可能重复:
  Usage of toString in JavaScript

152..toString(2)

正确创建二进制字符串“10011000”,但

152.toString(2)

抛出异常

  

“SyntaxError:标识符在数字文字后立即开始”

为什么呢?后一种语法实际上听起来更正确,而前者看起来很奇怪!

3 个答案:

答案 0 :(得分:101)

词法分析器(又名“标记器”)在读取新标记时,在第一次找到数字时,将继续消耗字符(即数字或一个点),直到它看到一个字符为< em> not 是合法号码的一部分。

<152.>是一个合法的令牌(不需要尾随0),但<152..>不是,所以你的第一个例子减少到这一系列的令牌:

<152.> <.> <toString> <(> <2> <)>

这是合法的(和预期的)序列,而第二个看起来像

<152.> <toString> <(> <2> <)>

这是非法的 - 没有期间令牌将号码与toString电话分开。

答案 1 :(得分:100)

数字之后的.可能看起来很模糊。它是小数还是对象成员运算符?

但是,解释器决定它是小数,所以你错过了成员运算符。

它看起来像这样:

(10.)toString();  // invalid syntax

当您包含第二个.时,您有一个小数,后跟成员运算符。

(10.).toString();

@pedants and downvoters

. 字符会出现歧义。可以理解为成员运算符或小数,具体取决于其位置。如果没有歧义,那就毫无疑问。

规范对该特定位置的.字符的解释是它将是小数。这由ECMAScript的数字文字语法定义。

仅仅因为规范解决了JS解释器的歧义,并不意味着.字符的模糊性根本不存在。

答案 2 :(得分:0)

10.float number你可以在float上使用toString

例如

parseFloat("10").toString() // "10"