可能的重复:
在 JavaScript 中使用 toString
152..toString(2)
正确创建二进制字符串“10011000”,但
152.toString(2)
抛出异常
“语法错误:标识符在数字文字之后立即开始”
为什么?后者的语法实际上听起来更正确,而前者看起来很奇怪!
可能的重复:
在 JavaScript 中使用 toString
152..toString(2)
正确创建二进制字符串“10011000”,但
152.toString(2)
抛出异常
“语法错误:标识符在数字文字之后立即开始”
为什么?后者的语法实际上听起来更正确,而前者看起来很奇怪!
.
数字后的A可能看起来不明确。它是十进制还是对象成员运算符?
但是,解释器决定它是一个小数,因此您缺少成员运算符。
它认为它是这样的:
(10.)toString(); // invalid syntax
当您包含第二个时.
,您有一个小数,后跟成员运算符。
(10.).toString();
@pedants 和downvoters
该.
角色提供了一个含糊不清。可以理解为成员运算符,也可以理解为小数,这取决于它的位置。如果没有歧义,就没有问题要问了。
规范.
对该特定位置的字符的解释是它将是一个小数。这是由 ECMAScript 的数字文字语法定义的。
仅仅因为规范解决了 JS 解释器的歧义,并不意味着.
字符的歧义根本不存在。
词法分析器(又名“分词器”)在读取新标记时,并在第一次找到数字时,将继续使用字符(即数字或一个点),直到它看到不是合法数字一部分的字符。
<152.>
是一个合法的标记(尾随 0 不是必需的)但<152..>
不是,所以你的第一个例子简化为这一系列的标记:
<152.> <.> <toString> <(> <2> <)>
这是合法的(和预期的)序列,而第二个看起来像
<152.> <toString> <(> <2> <)>
这是非法的 - 没有将号码与toString
呼叫分开的句点标记。
10.
是一个float number
你可以使用 toString 的float
例如。
parseFloat("10").toString() // "10"