【问题标题】:javascript i++ vs ++i [duplicate]javascript i++ vs ++i [重复]
【发布时间】:2011-10-15 14:56:15
【问题描述】:

在javascript中我看到i++在很多情况下被使用,我知道它在前面的值上加了一个:

for (var i=1; i<=10; i++) {
  console.log(i);
}

但是当我这样做时会发生什么:

++i;

使用-- 运算符有什么不同(当然除了它是减法而不是加法)?

【问题讨论】:

  • 了解 ++i 通常称为 PREFIX 表示法,而 i++ 称为 POSTFIX 表示法可能对您有用。它在许多其他语言中的工作方式相同。

标签: javascript operators


【解决方案1】:

++variable 增加变量,返回新值。

variable++ 增加变量,但返回旧值。

--variable 递减变量,返回新值。

variable-- 递减变量,但返回旧值。

例如:

a = 5;
b = 5;
c = ++a;
d = b++;

a 是 6,b 是 6,c 是 6,d 是 5。

如果您不使用结果,则前缀运算符与后缀运算符的作用相同。

【讨论】:

  • 如果你使用结果作为数组索引,你也可以先将它偏移1,作为前缀=]
【解决方案2】:
var i = 0;
console.log(i++); // 0
console.log(++i); // 2

【讨论】:

  • 这里最好用两个变量来说明区别。示例不应做多于一件事。
【解决方案3】:

它决定增量发生在变量值被使用之前还是之后。

var j = 2;
console.log(j++);   // 2
console.log(j);     // 3

var k = 2;
console.log(++k);   // 3
console.log(k);     // 3

【讨论】:

    【解决方案4】:

    i++++i 的区别在于表达式的值。

    i++ 的值是i 在增量之前的值。 ++i 的值是i 增加后的值。

    例子:

    var i = 42;
    alert(i++); // shows 42
    alert(i); // shows 43
    i = 42;
    alert(++i); // shows 43
    alert(i); // shows 43
    

    i----i 运算符的工作方式相同。

    【讨论】:

    • 在大多数情况下,++i 都稍微快一点。这可能取决于系统,但理论上应该。 jsperf.com/plusplusi-vs-iplusplus
    • @aelgoa:大部分时间差值在margin error之内,其余时间没有一致的结果。如果不使用表达式的值,理论上应该没有区别,因为编译器应该将其优化为相同的操作。
    • @aelgoa +1,因为这在其他语言中几乎完全覆盖,++i 始终是最佳实践,除非特定语言的性能明显更差。我听说人们认为它可以忽略不计,但并非总是如此。例如,使用服务器端 javascript 不只是生成页面,您很可能会快速循环数百万次。这可以将每个循环的开销减少约 1/2,这对单线循环非常重要。
    • Guffa 在这里是正确的。 jsperf.com/ppi-vs-ipp-forloop 当我运行这个测试时,它显示 i++ 在 for 循环中更快,但还不够重要。虽然 ++i 在其他语言中可能更快,但我认为可以肯定地说 javascript 将操作优化为相同。
    【解决方案5】:

    i++ = 在语句中使用 i 的值然后将其增加 1
    ++i = 将 i 的值增加 1 然后在语句中使用。

    【讨论】:

      【解决方案6】:

      为了完整起见,我想添加一个特定于 OP 问题的第一个问题的答案:

      您的一个示例显示了在 for 循环中使用的 i++ / ++i :

      for (i=1; i<=10; i++) {
        alert(i);
      }
      

      无论您使用哪一种,您都会在提醒中获得 1-10 个。示例:

        console.log("i++");
        for (i=1; i<=10; i++) {
          console.log(i);
        }
        console.log("++i");
        for (i=1; i<=10; ++i) {
          console.log(i);
        }

      将它们粘贴到控制台窗口中,您可以看到它们都有相同的输出。

      【讨论】:

      • 没错,但反过来做:console.log("i--"); for (i=10; i--;) { console.log(i); } console.log("--i"); for (i=10; --i;) { console.log(i); }
      • 为什么?在 for 循环中使用 ++i 的能力无疑是理想的行为。
      【解决方案7】:

      所有这些答案都没有提到的一种情况是,当i++++i 用于其他数字的操作时会发生什么。虽然整个“i++ 在之前,++i 在之后”的概念在表达式本身时很容易掌握,但当您开始组合语句时,它会变得更加混乱。请参见下面的示例 C 和 D。

      // Example A
      var i = 42;
      var a = i++; // equivalent to `var a = i; i = i+1;`
      console.log(a); // 42
      console.log(i); // 43
      
      // Example B
      var i = 42;
      var b = ++i; // equivalent to `i = i+1; var b = i;`
      console.log(b); // 43
      console.log(i); // 43
      
      // Example C
      var i = 42;
      var c = i++ * 2; // equivalent to `var c = i*2; i = i+1;`
      console.log(c); // 84
      console.log(i); // 43
      
      // Example D
      var i = 42;
      var d = ++i * 2; // equivalent to `i = i+1; var d = i*2;`
      console.log(d); // 86
      console.log(i); // 43
      

      请注意,在示例 C 中,i++ 直到 乘法和分配 c 后才被计算。这反驳了“i++ 应按操作顺序首先评估”的误解。所以换句话说,i++ * 2 语句实际上计算了i * 2 之前 它增加了i

      【讨论】:

        【解决方案8】:

        ++variable : 使用变量前递增变量
        variable++ : 使用变量后递增变量

        我认为包含一个带有 sn-p 的答案可能会很有用,以确认它们在 for 循环中的行为。

        只是为了在您的浏览器中验证在 for 循环声明中使用 ++ii++ 确实没有区别。

        然后在我们处理的时候抛出 --ii--

        console.log("-- with looping --");
        
        console.log("using ++i in a for loop");
        for (var i=1; i<=3; ++i) {
          console.log(i);
        }
        
        console.log("using i++ in a for loop");
        for (var i=1; i<=3; i++) {
          console.log(i);
        }
        
        console.log("using --i in a for loop");
        for (var i=3; i>=1; --i) {
          console.log(i);
        }
        
        console.log("using i-- in a for loop");
        for (var i=3; i>=1; i--) {
          console.log(i);
        }
        
        console.log("-- without looping --");
        var i = 1;
        console.log("i: "+ i);
        console.log("i++: "+ i++);
        console.log("i: "+ i);
        console.log("++i: "+ ++i);
        console.log("i: "+ i);
        console.log("--i: "+ --i);
        console.log("i: "+ i);
        console.log("i--: "+ i--);
        console.log("i: "+ i);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-02-15
          • 2012-01-16
          • 2011-07-27
          • 2012-09-02
          • 2011-09-16
          • 1970-01-01
          相关资源
          最近更新 更多