71

可能重复:
在 JavaScript 中使用 toString

152..toString(2)

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

152.toString(2)

抛出异常

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

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

4

3 回答 3

103

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

但是,解释器认为它是小数,因此您缺少成员运算符。

它认为它是这样的:

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

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

(10.).toString();

@pedants 和 downvoters

. 人物表现出模棱两可。可以理解为成员运算符,也可以是小数,视其位置而定。如果没有歧义,就没有问题可问。

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

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

于 2012-10-30T23:55:21.060 回答
101

词法分析器(又名“tokenizer”)在读取新标记时,在第一次找到一个数字时,将继续使用字符(即数字或一个点),直到它看到一个属于合法数字的字符。

<152.>是合法标记(不需要尾随 0)但<152..>不是,因此您的第一个示例简化为这一系列标记:

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

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

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

这是非法的 - 没有将号码与toString通话分开的句号。

于 2012-10-30T23:59:53.040 回答
0

10.float number一个你可以使用 toString 的float

例如。

parseFloat("10").toString() // "10"
于 2012-10-30T23:55:17.943 回答