为什么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"