And*_*old 67 javascript syntax
可能重复:
在JavaScript中使用toString
152..toString(2)
Run Code Online (Sandbox Code Playgroud)
正确创建二进制字符串"10011000",但是
152.toString(2)
Run Code Online (Sandbox Code Playgroud)
抛出一个例外
"SyntaxError:标识符在数字文字后立即启动"
为什么?后一种语法实际上听起来更正确,而前者看起来很奇怪!
Aln*_*tak 101
词法分析器(也称为"标记器")在读取新标记时,在第一次找到数字时,将继续消耗字符(即数字或一个点),直到它看到不属于合法数字的字符.
<152.>是一个合法的令牌(不需要尾随0),但<152..>不是,所以你的第一个例子减少到这一系列的令牌:
<152.> <.> <toString> <(> <2> <)>
Run Code Online (Sandbox Code Playgroud)
这是合法的(和预期的)序列,而第二个看起来像
<152.> <toString> <(> <2> <)>
Run Code Online (Sandbox Code Playgroud)
这是非法的 - 没有句号将号码与号码分开toString.
I H*_*azy 100
一个.一个数后似乎模棱两可.它是小数还是对象成员运算符?
但是,解释器决定它是小数,所以你错过了成员运算符.
它看起来像这样:
(10.)toString(); // invalid syntax
Run Code Online (Sandbox Code Playgroud)
当您包含第二个时.,您有一个小数后跟成员运算符.
(10.).toString();
Run Code Online (Sandbox Code Playgroud)
@pedants和downvoters
该. 角色提供了一个含糊不清.可以理解为成员运算符或小数,具体取决于其位置.如果没有歧义,那就毫无疑问.
规范.对该特定位置的字符的解释是它将是小数.这由ECMAScript的数字文字语法定义.
仅仅因为规范解决了JS解释器的歧义,并不意味着.角色的模糊性根本不存在.
| 归档时间: |
|
| 查看次数: |
8181 次 |
| 最近记录: |