【问题标题】:++someVariable vs. someVariable++ in JavaScriptJavaScript 中的 ++someVariable 与 someVariable++
【发布时间】:2021-06-22 00:53:58
【问题描述】:

在 JavaScript 中,您可以在 (pre-increment) 或变量名 (post-increment) 之前使用 ++ 运算符。这些递增变量的方法之间有什么区别(如果有的话)?

【问题讨论】:

标签: javascript increment unary-operator


【解决方案1】:

与其他语言相同:

  • ++x (pre-increment) 意思是“增加变量;表达式的值是最终值”
  • x++(后自增)意思是“记住原值,然后递增变量;表达式的值就是原值”

现在作为独立语句使用时,它们的含义相同:

x++;
++x;

当您在其他地方使用表达式的值时,差异就出现了。例如:

x = 0;
y = array[x++]; // This will get array[0]

x = 0;
y = array[++x]; // This will get array[1]

【讨论】:

  • 诅咒,如果我没有停下来加载一个实用的 jsfiddle 答案,我几乎击败了你。 ;-)
  • 如果您使用+ 1 而不是++,会是什么样子?添加数字时有没有办法在前后递增?
  • 我想知道为什么如果你做这个操作 const r1 =(x++)+(x++);根据您的示例,它不会产生预期的结果。
  • @JeanJimenez:嗯,它产生了 期望的结果。例如,如果x 以 10 开头,则 r1 的值为 21,即 10+11。第一个x++ 表达式的值为10,x 递增为11。第二个x++ 表达式的值为11,x 递增为12。
  • 亲爱的@JonSkeet 感谢您的超快响应,我是学习 JavaScript 的新手,我的困惑是为什么一个递增而另一个不递增。
【解决方案2】:

据我了解,如果您单独使用它们,它们会做同样的事情。如果您尝试将它们的结果作为表达式输出,那么它们可能会有所不同。尝试将 alert(i++) 与 alert(++i) 进行比较以查看差异。 i++ 在加法之前计算为 i 并且 ++i 在计算之前进行加法。

有关示例,请参阅 http://jsfiddle.net/xaDC4/

【讨论】:

    【解决方案3】:
    • ++x 递增值,然后计算并存储它。
    • x++ 计算值,然后递增并存储它。
    var n = 0, m = 0;
    
    alert(n++); /* Shows 0, then stores n = 1 */
    alert(++m); /* Shows 1, then stores m = 1 */
    

    请注意,在可能的情况下使用++x 会带来轻微的性能优势,因为您读取变量,修改它,然后评估并存储它。与 x++ 运算符相比,您在其中读取值、评估它、修改它,然后存储它。

    【讨论】:

      【解决方案4】:
      var x = 0, y = 0;
      
      //post-increment: i++ returns value then adds one to it
      console.log('x++ will log: ', x++); //0
      console.log('x after x++ : ', x);    //1
      
      //pre-increment: adds one to the value, then returns it
      console.log('++y will log: ', ++y); //1
      console.log('y after ++y : ', y);   //1
      

      【讨论】:

        【解决方案5】:
        var a = 1;
        var b = ++a;
        alert('a:' + a + ';b:' + b); //a:2;b:2
        
        var c = 1;
        var d = c++;
        alert('c:' + c + ';d:' + d); //c:2;d:1
        

        jsfiddle

        【讨论】:

          【解决方案6】:

          我对理解后增量和前增量有一个解释。所以我把它放在这里。

          让我们将0 分配给x

          let x = 0;
          

          让我们从后增量开始

          console.log(x++); // Outputs 0
          

          为什么?

          让我们分解x++ 表达式

          x = x;
          x = x + 1;
          

          第一条语句返回x的值,即0

          稍后当您在任何地方使用x 变量时,就会执行第二条语句

          第二条语句返回 x + 1 表达式的值,即 (0 + 1) = 1

          记住x在这个状态下的值是1

          现在让我们从预增量开始

          console.log(++x); // Outputs 2
          

          为什么?

          让我们分解++x 表达式

          x = x + 1;
          x = x;
          

          第一条语句返回x + 1 表达式的值,即(1 + 1) = 2

          第二条语句返回x 的值,即2 所以x = 2 因此它返回2

          希望这能帮助您了解什么是后增量和前增量!

          【讨论】:

            猜你喜欢
            • 2012-06-07
            • 1970-01-01
            • 2011-07-26
            • 1970-01-01
            • 2011-01-17
            • 1970-01-01
            相关资源
            最近更新 更多