增加对JavaScript增量运算符的理解

时间:2013-01-14 14:28:01

标签: javascript

  

可能重复:
  ++someVariable Vs. someVariable++ in Javascript

我正在努力理解增量运算符。此运算符递增(加1)其操作数并返回一个值。我在操作数(x ++)之后使用了postfix和operator,所以它在递增之前返回值。

因此,如果x为3,则语句y = x ++将y设置为3并将x递增为4

var x = 3; 
var y = x++; 

console.log(x); // 4
console.log(y); // 3

我不明白为什么y没有值4而是设置为3,为什么x保持值为4,当它被赋值为4时3。

9 个答案:

答案 0 :(得分:4)

post -increment运算符在获取其值后递增。这就是它与预增量运算符的不同之处。

答案 1 :(得分:2)

通过 Alex 评论来改善问题。

假设有一个变量x,s.a。 var x=3

案例1 当你写:

var y = x++;

然后,完成以下步骤:

  1. 评估变量xx为3);
  2. 变量x递增(x为4);
  3. 评估结果(发生在步骤(1)中)被分配给y(因此会产生y=3);
  4. 案例2 当你写:     var y = ++ x;

    然后,完成以下步骤:

    1. 变量x递增(x为4);
    2. 评估变量xx为4);
    3. 评估结果(发生在步骤(2)中)被分配给y(因此会产生y=4);
    4. 在这种情况下,遵循Javascript的运算符优先级非常重要(例如,请参阅更多here)。

      案例3 为了完整性,正如 Alex 所观察到的那样,同样重要的是要认识到如果 CASE1 中提供的步骤在同一个变量上重复,那么变量将会增加然后恢复到初始值,即当你写:

      x = x++;
      

      然后,完成以下步骤:

      1. 评估变量xx为3);
      2. 变量x递增(x为4);
      3. 评估结果(发生在步骤(1)中)被分配给x(因此会产生x=3);

答案 2 :(得分:2)

var y = x++;

这两个陈述的简写(按顺序):

var y = x;
x = x + 1;

如果你希望y等于4,你会这样做:

var y = ++x;

这是简写:

x = x + 1;
var y = x;

答案 3 :(得分:1)

来自MDN Docs - Arithmetic Operators

  

++(增量)

     

增量运算符的用法如下:

     

var ++或++ var

     

此运算符递增(加1)其操作数并返回a   值。如果使用postfix,则使用操作符后的操作符(例如,   x ++),然后在递增之前返回值。如果使用前缀   在操作数之前使用运算符(例如,++ x),然后返回   递增后的值。

     

例如,如果x为3,则语句y = x ++将y设置为3和   将x增加到4.如果x为3,则语句y = ++ x递增x   到4并将y设置为4。

答案 4 :(得分:0)

变量之后的++是后增量运算符,意味着在读取变量后执行增量。

请参阅:http://en.wikipedia.org/wiki/Increment_and_decrement_operators

答案 5 :(得分:0)

在发出x值的临时副本并返回临时副本之后发生x++的增量。相反的是++ x,它是一个增量并返回新值:

var x = 3;
var y = ++x; // y === 4

引自ECMA 5.1

  

PostfixExpression:LeftHandSideExpression LeftHandSideExpression [no   这里的LineTerminator] ++ LeftHandSideExpression [没有LineTerminator   在这里] - 70©Ecma International 2011
  11.3.1后缀增量运算符生成PostfixExpression:LeftHandSideExpression [此处没有LineTerminator] ++被评估为   如下:   1.让lhs成为评估LeftHandSideExpression的结果。 2.如果满足以下条件,则抛出SyntaxError异常   true:Type(lhs)是Reference为trueIsStrictReference(lhs)是   trueType(GetBase(lhs))是环境记录   GetReferencedName(lhs)是“eval”或“arguments”.3。使用oldValue   是ToNumber(GetValue(lhs))。 4.让newValue成为添加的结果   值1到oldValue,使用与+运算符相同的规则   (见11.6.3)。 5.调用PutValue(lhs,newValue)。 6.返回oldValue。

答案 6 :(得分:0)

x++是* post * increment运算符。它相当于:

 var tmp = x;
 x = x + 1;
 return tmp;

这是旧C日的遗留物,人们很乐意编写如下代码:

 while(*dest++ = *src++);

(翻译:将内存范围复制到前0个字节)。还有一个* pre *增量运算符++ x,它先递增,然后返回递增的结果。

答案 7 :(得分:0)

有两种增加方式

var y = x++; // first make the allocation then the increasing
// and
var y = ++x; // first make the increasing then the allocation

答案 8 :(得分:0)

var y = x++; 

表示x递增,y指定递增值x

var y = ++x;

表示x递增,y指定预递增值x