++ num与num ++之间的区别

时间:2014-10-22 15:03:53

标签: javascript

阅读这两篇文章后:

我仍然对以下代码感到困惑:

var num = 0;

num++ // returns 0

++num // returns 1

为什么剂量num++会返回0?

我知道它首先分配,然后添加一个, 但我仍然不明白它为什么不显示1。

var num = 0;

num++ // returns 0

num // returns 1

我对以下示例感到困惑:

示例:

var num = 0;

num++
// assigns then increments

// So if it assigns the num = 0, then increments to 1, Where is one being 
//stored? Is it assigned anywhere?

或者是否分配表达式。

(我想这个表达式是这样的:num = num + 1;)

这可能是我最好的猜测,但它仍然不是100%清楚,我仍然不明白为什么num ++显示/返回0而不是让表达式被评估并返回1。

3 个答案:

答案 0 :(得分:4)

也许看规范有帮助。

Postfix increment operatornum++

  

生产 PostfixExpression:LeftHandSideExpression [此处没有LineTerminator] ++ 评估如下:

     

1。 lhs 成为评估 LeftHandSideExpression 的结果。

这仅仅意味着我们正在查看++之前的内容,例如num中的num++

  

2。如果满足以下条件,则抛出SyntaxError例外:[为简洁而省略]

此步骤确保lhs确实引用变量。后缀运算符仅适用于变量,使用例如文字1++将是语法错误。

  

3。 oldValue ToNumberGetValue lhs ))。

获取 lhs 表示的变量的值,并将其存储在oldValue中。想象一下它就像var oldValue = num;。如果num = 0那么oldValue = 0也是如此。

  

4. newValue 是将值1添加到 oldValue 的结果,使用与+运算符相同的规则(请参阅11.6.3)。

只需将{1}添加到oldValue,然后将结果存储在newValue中。像newValue = oldValue + 1这样的东西。在我们的情况下,newValue将是1

  

5。致电PutValue lhs newValue )。

这会再次将新值分配给 lhs 。等价物是num = newValue;。所以num现在是1

  

6. 返回 oldValue

返回仍为oldValue的{​​{1}}的值。

再次,在伪JavaScript代码中,0等同于:

num++

Prefix increment operator(++ num)

该算法与后缀运算符完全相同,但有一点不同:在最后一步中,返回var oldValue = num; // remember current value var newValue = oldValue + 1; // add one to current value num = newValue; // sore new value return oldValue; // return old value 而不是newValue

  

6。返回 newValue

答案 1 :(得分:3)

采用以下示例:

var num = 0;
var result = 0;

以下内容:

result = num++; 

等于说:

result = num;
num = num + 1;

另一方面,这个:

result = ++num;

对此更公平:

num = num + 1;
result = num;

这两个陈述有点像做常规操作的简写。

答案 2 :(得分:2)

当您键入num++作为语句时,JavaScript将首先评估num - 这就是为什么它显示零 - 然后增加。这就是为什么它被称为 post -increment operator。

如果你这样做,你会更清楚地看到发生的事情:

var num = 0;
num++;        // Outputs 0 (current value, set in previous step), then increments
num;          // Outputs 1 (current value, incremented in previous step)

使用 pre -increment,首先发生增量,所以你得到:

var num = 0;
++num;        // Outputs 1
num;          // Outputs 1