152..toString(2)
正确创建二进制字符串“10011000”,但
152.toString(2)
抛出异常
“SyntaxError:标识符在数字文字后立即开始”
为什么呢?后一种语法实际上听起来更正确,而前者看起来很奇怪!
答案 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"