var x = null;
+++x
生成ReferenceError
,但是当我使用后缀增量运算符+x++
执行相同操作时,它的工作正常。
答案 0 :(得分:5)
LeftHandSideExpression
运算符的++
不能是数字。例如
1++;
将失败并出现相同的错误(无效的增量操作数)。您只能在变量/标识符/表达式上应用前后增量运算符。
由于+
符号将null value
转换为数字(0),因此结果相同。
示例:
var foo = null,
bar = 5;
foo++; // 0
0++; // invalid increment operand
null++; // invalid increment operand
(+bar)++ // invalid increment operand
foo++ +2; // 2
答案 1 :(得分:1)
+ x ++分为两个步骤:
+++ x也分为两个步骤,但按特定顺序:
我认为你的假设是+++ x会被解析为++(+ x),但它实际上被解析为+(++ x)。这是一种模糊的语法,语言设计者不得不选择两种方法来解析它,从你的角度来看,他们选择了“另一种”。
老实说,无论如何,以这种方式格式化代码绝对没有任何价值 - 所有你最终得到的是可疑的代码,这注定会让人感到困惑。
答案 2 :(得分:0)
如果你使用x = 0; x将用一个接受++ x运算符的整数类型初始化,而++(+ x) 就像一个++(+ null) 所以最好尝试改为X = 0;