web-dev-qa-db-fra.com

javascript i ++ vs ++ i

En javascript j'ai vu i++ utilisé dans de nombreux cas, et je comprends qu'il ajoute un à la valeur précédente:

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

Mais que se passe-t-il quand je fais ceci:

++i;

Et est-ce différent en utilisant le -- _ opérateur (à part bien sûr qu’il s’agit de soustraction plutôt que d’addition)?

104
Web_Designer

La différence entre i++ et ++i est la valeur de l'expression.

La valeur i++ est la valeur de i avant l’incrément. La valeur de ++i est la valeur de i après l’incrément.

Exemple:

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

Le i-- et --i _ opérateurs fonctionne de la même manière.

175
Guffa

++variable incrémente la variable et renvoie la nouvelle valeur.

variable++ incrémente la variable, mais renvoie l'ancienne valeur.

--variable décrémente la variable et renvoie la nouvelle valeur.

variable-- décrémente la variable, mais renvoie l'ancienne valeur.

Par exemple:

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

a vaut 6, b est 6, c est 6 et d est 5.

Si vous n'utilisez pas le résultat, les opérateurs de préfixe fonctionnent également pour les opérateurs postfixés.

49
Delan Azabani

J'ai pensé que pour compléter, j'ajouterais une réponse spécifique à la première question du PO:

L'un de vos exemples montre que l'i ++/++ i est utilisé dans une boucle for:

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

vous recevrez 1-10 dans vos alertes, peu importe ce que vous utilisez. Exemple:

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

Collez-les dans une fenêtre de console et vous pouvez voir qu'ils ont tous les deux la même sortie.

9
bladnman

i++ = Utilisez la valeur de i dans l'instruction puis augmentez-la de 1
++i = Augmente la valeur de i de 1 puis utilise in statement.

7
kaush

Un cas que toutes ces réponses omettent de mentionner est ce qui se passe quand i++ et ++i sont utilisés dans les opérations avec d'autres nombres. Alors que le tout “i++ est avant, ++i is after ”Le concept est facile à comprendre lorsque l’expression est isolée, il devient beaucoup plus confus lorsque vous commencez à combiner des instructions. Voir les exemples C et D ci-dessous.

// 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

Notez que dans l'exemple C, le i++ n'est pas évalué avant la multiplication de après et l'affectation de c. Cela contredit l’idée fausse selon laquelle "i++ devrait être évalué en premier dans l'ordre des opérations. ”En d'autres termes, l'affirmation i++ * 2 calcule en fait i * 2avant il incrémente i.

6
chharvey

Il détermine si l'incrément a lieu avant ou après l'utilisation de la valeur de la variable.

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

var k = 2;
console.log(++k);   // 3
console.log(k);     // 3
6
jfriend00
var i = 0;
console.log(i++); // 0
console.log(++i); // 2
5
Joe

Je sais, cette question de 2011 a longtemps été répondue.

++ variable: Incrémenter variable avant d'utiliser variable
variable ++: Incrémenter la variable après avoir utilisé la variable

Mais j’ai pensé qu’il pourrait toujours être utile d’inclure une réponse avec un extrait pour confirmer leur comportement dans une boucle for.

Juste pour vérifier dans votre navigateur qu'il n'y a vraiment aucune différence lorsque vous utilisez un ++ i par rapport à un i ++ dans la déclaration de boucle for.
Et jeter –i contre i– pendant que nous y sommes.

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
LukStorms