javascript i ++ vs ++ i

Web*_*ner 109 javascript operators

在javascript中我见过i++在许多情况下使用过,我知道它在前面的值中添加了一个:

for (var i=1; i<=10; i++) {
  console.log(i);
}
Run Code Online (Sandbox Code Playgroud)

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

++i;
Run Code Online (Sandbox Code Playgroud)

使用--运算符是否有任何不同(当然除了加法而不是加法)?

Guf*_*ffa 183

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
Run Code Online (Sandbox Code Playgroud)

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

  • 大多数时候,++我的速度要快得多.这可能是系统依赖的,但理论上它应该是.http://jsperf.com/plusplusi-vs-iplusplus (9认同)
  • @aelgoa:大部分时间差异在保证金误差范围内,其余时间没有一致的结果.如果不使用表达式的值,理论上应该没有任何区别,因为编译器应该将它优化为相同的操作. (7认同)
  • Guffa在这里是正确的.http://jsperf.com/ppi-vs-ipp-forloop当我运行这个测试时它显示i ++在for循环中更快,但不足以显着.虽然++ i在其他语言中可能更快,但我认为可以肯定地说javascript优化操作是相同的. (6认同)

Del*_*ani 51

++variable 递增变量,返回新值.

variable++ 递增变量,但返回旧值.

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

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

例如:

a = 5;
b = 5;
c = ++a;
d = b++;
Run Code Online (Sandbox Code Playgroud)

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

如果您没有使用结果,前缀运算符对后缀运算符的作用相同.


bla*_*man 9

我认为为了完整性,我会在OP的第一个问题中添加一个特定答案:

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

for (i=1; i<=10; i++) {
  alert(i);
}
Run Code Online (Sandbox Code Playgroud)

无论您使用哪种警报,您的警报都会得到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);
}
Run Code Online (Sandbox Code Playgroud)

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

  • 为什么?在 for 循环中使用 ++i 的能力肯定是理想的行为。 (2认同)

小智 7

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


jfr*_*d00 6

它确定增量是在使用变量值之前还是之后发生的.

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

var k = 2;
console.log(++k);   // 3
console.log(k);     // 3
Run Code Online (Sandbox Code Playgroud)


chh*_*vey 6

一个情况下,所有这些问题的答案不能不提是发生了什么的时候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
Run Code Online (Sandbox Code Playgroud)

请注意,在示例C中,i++直到乘法和赋值后才对其求值c.这反驳了" i++应该首先按操作顺序进行评估"的误解.换句话说,语句i++ * 2实际上是i * 2 它递增之前计算的i.


Joe*_*Joe 5

var i = 0;
console.log(i++); // 0
console.log(++i); // 2
Run Code Online (Sandbox Code Playgroud)

  • 不正确,请在您的控制台中测试它. (4认同)
  • Nvm我正在将您的代码作为单独的语句0_0读取 (4认同)
  • 最好在这里使用两个变量来说明差异.例子不应该做多件事. (2认同)

Luk*_*rms 5

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

我认为包含一个带有片段的答案以确认它们在for循环中的行为会很有用。

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

并在我们进行时投掷--i对抗i--

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);
Run Code Online (Sandbox Code Playgroud)