代码块1:
var a = (1 + - + + + - + 1);
alert(a); //2
为什么等于2?
代码块2:
var a = (1+-+++-+1);
alert(a); //ReferenceError: Invalid left-hand side expression in prefix operation
答案 0 :(得分:3)
在表达式中使用空格时,它会丢弃前一个运算符,这就是为什么代码阻止了两个错误,而代码块1基本上就是这样做了:
var a = (1 + 1);
答案 1 :(得分:0)
实际上,它只是basic math。它被分组并像这样评估
1 + (- (+ (+ (+ (- (+ 1))))))
它不会丢弃以前的运营商。它只是使用-
乘以+
的基本法则-
。
例如,以下内容只是1 - (+ 1)
的分组,1 - 1
0
1 - + 1 // 0
现在,当你不使用空格时,javascript会将其解释为递增和递减运算符,从而解释错误。
答案 2 :(得分:0)
首先,另一个答案是关于#34;怪异的"在第一种情况下的行为。您在第二种情况下没有空格的情况下获得ReferenceError
的原因是因为其中两个+
被视为++
增量命令。
1+-+(+(+-1))
不会给您一个错误