【问题标题】:Postfix and prefix increments in JavaScriptJavaScript 中的后缀和前缀增量
【发布时间】:2018-09-08 02:01:30
【问题描述】:

我只是对一件事感到好奇。 Javascript中的一个小例子

var a = 1;
a = a++;
console.log(a); // 1

var b = 1;
b = ++b;
console.log(b); // 2

var c = 1;
c += 1;
console.log(c); //2

我明白为什么在bc 的情况下它会这样工作,但是a 呢? 起初代码进行赋值a = a,值实际上保持不变,但随后它应该(如我所见)每单位增加和增加值a。但这并没有发生。为什么?

【问题讨论】:

  • 我相信a++ 表示增量a,但未分配。而++b 是递增和赋值。所以在这一点上:a = a++ a 增加了,但又被分配回了原来的值。
  • javascript i++ vs ++i的可能重复
  • 您通常不会使用a = a++a = ++a。如果您想分配 a++++a 的返回值,您不会想将它们分配给您要递增的值。
  • @Eddie 不,这与后增量与前增量无关。这与 a = a++; 的含义和作用有关。
  • 不要仅仅基于标题。帖子上的答案也回答了这个帖子。 @Xufox

标签: javascript


【解决方案1】:
var a = 1;
a = a++;
  1. 1 分配给 a
  2. a++ 被评估为 1
  3. a++a 递增到 2
  4. a = {result of previous evaluation}1 分配给a 所以它又是1
var b = 1;
b = ++b;
  1. 1 分配给 b
  2. ++bb 递增到 2
  3. ++b 被评估为 2
  4. b = {result of previous evaluation}2 分配给 b 所以它仍然是 2

【讨论】:

    【解决方案2】:

    这就是post increment 的工作原理

    如果使用后缀,操作数后面有运算符(例如,x++),则返回递增前的值。

    a = a++;

    当 a++ 执行时,a 为 2,表达式返回 1,a 被赋值为 1。

    这就是您在增量之前看到值的原因。

    请注意,如果您不重新分配,您会看到a 的递增值。简而言之,您通过将其重新分配来覆盖此处的增量值。

    var a = 1;
    a++;
    console.log(a); // 1

    【讨论】:

    • 你的例子实际上返回 2 而不是 1。所以答案应该适应 var a = 1; a++; console.log(a); // 2
    【解决方案3】:

    传闻,执行++a,内存中的值增加,然后返回。而对于a++,首先将值存储在创建的临时变量中,然后主变量的值递增并返回临时变量的值-因此创建临时变量的“费用”增加了。

    【讨论】:

      【解决方案4】:

      a++ 的情况下,返回值实际上是原始值。您已再次将原始值分配给 a

      【讨论】:

        【解决方案5】:

        a++返回之前自增的值; 而++a返回自增的值;

        所以这就是为什么当你调用a = a++ 时,a 等于 1;

        【讨论】:

          【解决方案6】:

          a= a++ 返回增量前它的值。

          你可以使用a++

          【讨论】:

            【解决方案7】:

            后缀运算符返回 a 的原始值。 所以 a 被后缀 ++ 运算符增加,但随后 a 被分配运算符的返回值覆盖,这是增加之前的值。

            【讨论】:

              【解决方案8】:

              1a 的返回值是临时存储的,用于赋值,然后发生增量,a 现在有 2 的值,然后之前存储的值的赋值发生。

              a = a++;
              

              是一样的

              a = (temp = a, a++, temp);
              

              【讨论】:

                【解决方案9】:
                var a = 1;
                // Here a++ means a = a; then a = a + 1
                
                a = a++; // so you are assign first step value inside a so thats way a = 1
                
                console.log(a); // 1
                

                表示当 a++ 等于 a = a 时,您正在存储值。您只需分配 a 的值并替换该值。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2017-08-04
                  • 2014-08-11
                  • 2012-10-03
                  • 1970-01-01
                  • 2017-12-12
                  • 2011-03-12
                  • 1970-01-01
                  相关资源
                  最近更新 更多