我正在摆弄不同的东西,像这样
var a = 1, b = 2;
alert(a + - + - + - + - + - + - + - + b); //alerts -1
Run Code Online (Sandbox Code Playgroud)
我可以删除空格,它仍然可以工作.
a+-+-+-+-+-+-+-+b
Run Code Online (Sandbox Code Playgroud)
然后我试了一下
a + + b
Run Code Online (Sandbox Code Playgroud)
它运行并评估为3,但当我删除空格时,(a++b)它不会运行,并且它有一个警告,上面写着"令人困惑的加号".
在类似的情况下,我可以理解
a+++++b
Run Code Online (Sandbox Code Playgroud)
可以解释为以下任何一种
(a++) + (++b)
(a++) + +(+b)
a + +(+(++b))
a + +(+(+(+b)))
Run Code Online (Sandbox Code Playgroud)
这会令人困惑.
但在这种情况下
a++b
Run Code Online (Sandbox Code Playgroud)
据我所知,唯一有效的解释方法是
a + +b
Run Code Online (Sandbox Code Playgroud)
为什么不起作用a++b?
Dig*_*ane 58
Javascript解析器是贪婪的(它每次匹配最长的有效运算符),因此它从++运算符中获取a++b,使得:
(a++) b
Run Code Online (Sandbox Code Playgroud)
这是无效的.放入空格时a + + b,解析器将其解释为:
(a) + (+b)
Run Code Online (Sandbox Code Playgroud)
哪个是有效的,可以算是三个.
有关详细信息,请参阅此维基百科关于Maximal munch的文章.
这是一元运算符差异的b/c.
"a + + b" is the same as "a + (+b)"
"a++b" is the same as "(a++) _ b" <--- there is a missing operator where the _ is
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1223 次 |
| 最近记录: |