首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >++num与num++的区别

++num与num++的区别
EN

Stack Overflow用户
提问于 2014-10-22 15:03:52
回答 3查看 15.7K关注 0票数 0

在阅读了这两篇文章之后:

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

代码语言:javascript
运行
复制
var num = 0;

num++ // returns 0

++num // returns 1

为什么num++返回0?

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

代码语言:javascript
运行
复制
var num = 0;

num++ // returns 0

num // returns 1

我真的对下面的例子感到困惑:

示例:

代码语言:javascript
运行
复制
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;)

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-22 15:37:11

也许看看说明书会有帮助。

后缀增量算子 (num++)

production : LeftHandSideExpression no LineTerminator here ++的评估如下: 1.让lhs成为评价LeftHandSideExpression的结果。

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

如果以下条件都为真,则2.抛出一个SyntaxError异常:

这个步骤确保lhs确实引用了一个变量。后缀操作符只处理变量,例如使用文本1++,这将是语法错误。

3. oldValue be ToNumber(GetValue(lhs))。

获取由lhs表示的变量的值,并将其存储在oldValue中。想象一下这是一种类似于var oldValue = num;的东西。如果是num = 0,那么oldValue = 0也是。

4.让newValue是向oldValue添加值1的结果,使用与+操作符相同的规则(参见11.6.3)。

只需将1添加到oldValue中并将结果存储在newValue中。有点像newValue = oldValue + 1。在我们的例子中,newValue将是1

5. Call PutValue(lhs,newValue)。

这再次为lhs分配了新的价值。等价物是num = newValue;。所以num现在是1了。

6.返回oldValue。

返回oldValue的值,它仍然是0

因此,在伪JavaScript代码中,num++等价于:

代码语言:javascript
运行
复制
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

前缀增量算子 (++num)

算法与后缀操作符完全相同,但有一个不同之处:在最后一步中,返回newValue而不是oldValue

  1. 返回newValue。
票数 6
EN

Stack Overflow用户

发布于 2014-10-22 15:09:01

以下列例子为例:

代码语言:javascript
运行
复制
var num = 0;
var result = 0;

以下内容如下:

代码语言:javascript
运行
复制
result = num++; 

等于说:

代码语言:javascript
运行
复制
result = num;
num = num + 1;

另一方面,这是:

代码语言:javascript
运行
复制
result = ++num;

在这一点上更为公平:

代码语言:javascript
运行
复制
num = num + 1;
result = num;

这两种说法有点像做普通操作的速记。

票数 3
EN

Stack Overflow用户

发布于 2014-10-22 15:10:28

当您将num++作为语句输入时,JavaScript将首先计算num --这就是它显示零的原因--然后是增量。这就是为什么它被称为后增量运算符。

如果你要这么做,你会更清楚地看到发生了什么:

代码语言:javascript
运行
复制
var num = 0;
num++;        // Outputs 0 (current value, set in previous step), then increments
num;          // Outputs 1 (current value, incremented in previous step)

使用预增量时,增量首先发生,因此您将得到:

代码语言:javascript
运行
复制
var num = 0;
++num;        // Outputs 1
num;          // Outputs 1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26510679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档