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