请解释一下这些++和 - 操作

时间:2011-08-02 16:35:22

标签: javascript increment decrement

为什么这段代码输出3而不是2?

var i = 1; 
i = ++i + --i; 
console.log(i);

我期待:

++i // i == 2
--i // i == 1
i = 1 + 1 // i == 2

我犯了错误?

8 个答案:

答案 0 :(得分:10)

更改按以下顺序进行:

  1. 增加i(至2)
  2. i作为加法(2)
  3. 的左侧
  4. 减少i(至1)
  5. i作为加法(1)
  6. 的右侧
  7. 执行添加并分配到i(3)
  8. ...并且看到您尝试这样做,让我对JSLint不喜欢++--的原因有所了解。

答案 1 :(得分:3)

以这种方式看待它

x =(某事)
x =(++ i)+(某事)
x =(2)+(某事)
x =(2)+( - i)
x =(2)+(1)

这些术语从左到右进行评估,一旦第一个++ i被评估,当你用--i改变它的值时,它将不会被重新评估。

答案 2 :(得分:2)

你的第二行是加2 + 1.

按顺序,解释器将执行:

++i  // i == 2
+
--i  // i == 1
i = 2 + 1

答案 3 :(得分:0)

++i等于2,` - i'等于1. 2 + 1 = 3.

答案 4 :(得分:0)

你的操作顺序有点偏差。这是怎么回事:

  1. i增加1(++ i),得到值2.这是 存储在i。
  2. 然后将值2加到(--i)的值 这是1. 2 + 1 = 3

答案 5 :(得分:0)

因为当你使用++ i时,i的值会增加然后返回。但是,如果使用i ++,则返回i的值,然后递增。 Reference

答案 6 :(得分:0)

++$a   Increments $a by one, then returns $a.
$a++   Returns $a, then increments $a by one.
--$a   Decrements $a by one, then returns $a.
$a--   Returns $a, then decrements $a by one.

答案 7 :(得分:0)

因为您希望此代码像是一个引用对象一样工作,并且在一元操作完成之前不会收集这些值。但是在大多数语言中,首先计算表达式,所以我返回i的值,而不是我自己。

如果你有++( - i)那么你就是对的。

简而言之,不要这样做。

该操作的结果在每种语言/编译器/解释器中的定义都不相同。因此,虽然它会在JavaScript中生成3,但可能会在其他位置导致2