当+ x ++工作正常时,为什么+++ x会给出错误消息?

时间:2011-10-10 16:05:28

标签: javascript

var x = null;

+++x生成ReferenceError,但是当我使用后缀增量运算符+x++执行相同操作时,它的工作正常。

3 个答案:

答案 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初始化为0,因此它不再为空。
  • x ++然后递增x,这是有效的,因为x不再为空。

+++ x也分为两个步骤,但按特定顺序:

    首先计算
  • ++ x,因为x为null,所以会抛出异常。
  • 然后会评估
  • + x,除非您已经有例外。

我认为你的假设是+++ x会被解析为++(+ x)​​,但它实际上被解析为+(++ x)。这是一种模糊的语法,语言设计者不得不选择两种方法来解析它,从你的角度来看,他们选择了“另一种”。

老实说,无论如何,以这种方式格式化代码绝对没有任何价值 - 所有你最终得到的是可疑的代码,这注定会让人感到困惑。

答案 2 :(得分:0)

如果你使用x = 0; x将用一个接受++ x运算符的整数类型初始化,而++(+ x) 就像一个++(+ null) 所以最好尝试改为X = 0;