为什么10..toString()工作,但10.toString()不?

可能重复:
在JavaScript中使用toString

152..toString(2) 

正确地创build二进制string“10011000”,但

 152.toString(2) 

抛出exception

“SyntaxError:标识符在数字文字后立即启动”

为什么? 后者的语法听起来更正确,而前者看起来很奇怪!

A。 之后数字可能看起来不明确。 它是小数还是对象成员操作符?

然而,解释器决定它是一个小数,所以你错过了成员操作符。

它认为这是:

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

当你包括第二个. ,你有一个小数,然后是成员操作符。

 (10.).toString(); 

@pedants和downvoters

. 性格呈现出模糊性 。 它可以被理解为成员操作符,或者一个小数,取决于它的位置。 如果没有歧义,就没有问题要问了。

规范的解释. 那个特定位置的字符就是小数。 这是由ECMAScript的数字文字语法定义的。

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

词法分析器(aka“tokenizer”)在读取新的标记时,首先find一个数字后,将继续使用字符(即数字或一个点),直到看到一个属于合法数字的字符。

<152.>是一个合法的标记(尾部0不是必需的),但<152..>不是,所以你的第一个例子简化为这一系列的标记:

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

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

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

这是非法的 – 没有句号令牌将数字从toString调用中分离出来。

10.是一个float number ,你可以在float上使用toString

例如。

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