javascript i++ vs ++i

W javascript widziałem i++ używane w wielu przypadkach, i rozumiem, że dodaje jeden do poprzedniej wartości:

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

Ale co się stanie, gdy to zrobię:

++i;

A czy jest inaczej używając operatora -- (Poza tym oczywiście, że to odejmowanie a nie dodawanie)?

Author: Web_Designer, 2011-07-29

8 answers

Różnica między i++ i ++i jest wartością wyrażenia.

Wartość i++ jest wartością i przed przyrostem. Wartość ++i jest wartością i po przyroście.

Przykład:

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

Operatory i-- i --i działają w ten sam sposób.

 156
Author: Guffa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-29 02:05:03

++variable zwiększa zmienną, zwracając nową wartość.

variable++ zwiększa zmienną, ale zwraca starą wartość.

--variable zmniejsza zmienną, zwracając nową wartość.

variable-- zmniejsza zmienną, ale zwraca starą wartość.

Na przykład:

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

a jest 6, b jest 6, c jest 6 i d jest 5.

Jeśli nie używasz wyniku, operatory prefiksu działają tak samo jak operatory postfixa.

 45
Author: Delan Azabani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-29 02:03:04

Pomyślałem, że dla kompletności dodam odpowiedź konkretną na pierwsze z pytań OP:

Jeden z Twoich przykładów pokazuje i++ / ++i używane w pętli for:

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

Otrzymasz 1-10 w swoich alertach bez względu na to, którego używasz. Przykład:

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

Wklej je do okna konsoli i zobaczysz, że oba mają ten sam wynik.

 8
Author: bladnman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-22 19:26:46

i++ = użyj wartości i w oświadczeniu, a następnie zwiększ ją o 1
++i = zwiększ wartość i o 1, a następnie użyj w instrukcji.

 7
Author: kaush,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-30 00:36:48
var i = 0;
console.log(i++); // 0
console.log(++i); // 2
 5
Author: Joe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-29 02:03:41

Określa, czy przyrost ma miejsce przed lub po użyciu wartości zmiennej.

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

var k = 2;
console.log(++k);   // 3
console.log(k);     // 3
 5
Author: jfriend00,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-29 02:03:53

Jednym z przypadków, w których wszystkie te odpowiedzi nie są wymienione, jest to, co się dzieje, gdy i++ i ++i są używane w operacjach z innymi liczbami. Podczas gdy cały "i++ jest przed, {[2] } jest po " pojęcie jest łatwe do zrozumienia, gdy wyrażenie jest samo w sobie, staje się znacznie bardziej mylące, gdy zaczynasz łączyć wyrażenia. Zobacz Przykłady C I d poniżej.

// Example A
var i = 42;
var a = i++; // equivalent to `var a = i; i++;`
console.log(a); // 42
console.log(i); // 43

// Example B
var i = 42;
var b = ++i; // equivalent to `i++; 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++;`
console.log(c); // 84
console.log(i); // 43

// Example D
var i = 42;
var d = ++i * 2; // equivalent to `i++; var d = i*2;`
console.log(d); // 86
console.log(i); // 43

Zauważ, że w przykładzie C, {[1] } nie jest oceniana do po mnożenie i przypisywanie c. To przeciwdziała błędnemu przekonaniu, że " i++ należy oceniać najpierw w kolejności operacji."Czyli innymi słowy twierdzenie i++ * 2 faktycznie oblicza i * 2 przed zwiększa i.

 4
Author: chharvey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-04 04:06:13

Wiem, na to pytanie z 2011 roku od dawna udzielono odpowiedzi.

++zmienna: zmienna przed użyciem zmiennej
zmienna++: zmienna przyrostowa po użyciu zmiennej

Ale uznałem, że nadal może być przydatne dołączenie odpowiedzi z fragmentem, aby potwierdzić, jak zachowują się w pętli for.

Tylko w celu sprawdzenia w przeglądarce, że naprawdę nie ma różnicy podczas używania a ++i versus a i++ w deklaracjach pętli for.
I rzucanie-ja kontra ja-gdy jesteśmy na to.

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);
 2
Author: LukStorms,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-07 15:37:53