javascript i++ vs ++i

IT技术 javascript operators
2021-01-18 19:02:52

在 javascript 中,我已经看到i++在很多情况下使用过,我知道它会在前面的值上加 1:

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

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

++i;

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

6个回答

i++之间的区别++i是表达式的值。

该值i++i增量前的的值++ii增量后的

例子:

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

i----i运营商的工作方式相同。

@aelgoa:大多数时候差异在边距误差内,其余时间没有一致的结果。如果不使用表达式的值,理论上应该没有任何区别,因为编译器应该将其优化为相同的操作。
2021-03-13 19:02:52
古法在这里是正确的。jsperf.com/ppi-vs-ipp-forloop当我运行这个测试时,它显示 i++ 在 for 循环中更快,但不足以显着。虽然 ++i 在其他语言中可能更快,但我认为可以肯定地说 javascript 优化了操作是相同的。
2021-03-29 19:02:52
@aelgoa +1,因为这几乎完全涵盖了其他语言,++i 始终是最佳实践,除非特定语言的性能明显较差。我听说人们认为它可以忽略不计,但并非总是如此。例如,服务器端 javascript 不仅仅是生成一个页面,你很可能会在一行行上快速循环数百万次。这可以将每个循环的开销减少 ~1/2,这对单行循环非常重要。
2021-04-02 19:02:52
大多数情况下,++i 会稍微快一点。这可能取决于系统,但理论上应该如此。 jsperf.com/plusplusi-vs-iplusplus
2021-04-09 19:02:52

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

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

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

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

例如:

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

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

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

如果您将结果用作数组索引,您也可以最初将其偏移 1,用于前缀 =]
2021-03-28 19:02:52

我认为为了完整性,我会添加一个特定于 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); }
2021-03-12 19:02:52
为什么?在 for 循环中使用 ++i 的能力将是理想的行为。
2021-03-17 19:02:52

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

所有这些答案都没有提到的一种情况是,在与其他数字的运算中使用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