Quelle est la différence entre ++ i et i ++ en JavaScript

Sur ma quête pour apprendre et améliorer mon JavaScript, je suis tombé sur un script qui a une déclaration de commutation / cas et j'ai remarqué que certaines variables sont incrémentées en utilisant ++ avec la variable avant le ++ et que certaines variables ont le ++ après la variable. Quelle est la différence entre ceux-ci? Voici un exemple de ce que j'essaie d'expliquer, notez les variables m et y.

switch(f){ case 0:{ ++m; if(m==12){ m=0; y++; } break; } case 1:{ --m; if(m==-1){ m=11; y--; } break; } case 2:{ ++y; break; } case 3:{ --y; break; } case 4:{ break; } } 

++i renvoie la valeur de i après qu'il a été incrémenté. i++ renvoie la valeur de i avant l'incrémentation.

Lorsque le ++ vient avant son opérande, il s'appelle l'opérateur "pré-incrémentation", et quand il s'agit de l'opérateur «post-incrémental».

Cette distinction n'est importante que si vous faites quelque chose avec le résultat.

 var i = 0, j = 0; alert(++i); // alerts 1 alert(j++); // alerts 0 

Une chose à noter cependant est que même si i++ renvoie la valeur avant d'incrémenter, elle renvoie toujours la valeur après qu'elle a été convertie en un nombre.

Alors

 var s = "1"; alert(typeof s++); // alerts "number" alert(s); // alerts 2, not "11" as if by ("1" + 1) 

La même différence que n'importe quel autre incrémentateur ++ style c.

foo = ++i est le même que:

 i = i + 1; foo = i; 

foo = i++ est le même que;

 foo = i; i = i + 1; 
 var i = 0; alert('i is ' + (++i)); // i is 1 // i is now 1 var i = 0; alert('i is ' + (i++)); // i is 0 // i is now 1 

Dans JS (ainsi que C, Perl et probablement une douzaine d'autres langues), l'opérateur ++ i augmente i avant qu'il n'évalue l'instruction, et i ++ l'augmente après. Même avec –.

Exemple:

 var i=1; alert(i++); 

Affiche "1", mais:

 var i=1; alert(++i); 

Affiche "2".

Pour illustrer, en supposant:

 var a = 1; 

puis

 var b = ++a; 

résulte en

 true === (b === 2 && a === 2) 

tandis que

 var b = a++; 

résulte en

 true === (b === 1 && a === 2) 

++ i est pré-incrémentation, i ++ est post-incremento.

Si vous n'impliquez que la variable et n'utilisez pas le résultat en même temps, ils sont équivalents.

Dans ce cas, vous devriez vraiment utiliser i + = 1 pour la lisibilité (dit Douglas Crockford ..)