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)?
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.
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.
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.
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.
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
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
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
.
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);
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