web-dev-qa-db-fra.com

++ someVariable vs someVariable ++ en JavaScript

En JavaScript, vous pouvez utiliser ++ opérateur avant (pré-incrément) ou après le nom de la variable (post-incrément). Quelles sont, le cas échéant, les différences entre ces façons d'incrémenter une variable?

116
Derek Adair

Comme dans les autres langues:

  • ++x (pré-incrémentation) signifie "incrémenter la variable; la valeur de l'expression est la valeur finale"
  • x++ (post-incrémentation) signifie "mémoriser la valeur d'origine, puis incrémenter la variable; la valeur de l'expression est la valeur d'origine"

Maintenant, lorsqu'ils sont utilisés comme une déclaration autonome, ils signifient la même chose:

x++;
++x;

La différence survient lorsque vous utilisez la valeur de l'expression ailleurs. Par exemple:

x = 0;
y = array[x++]; // This will get array[0]

x = 0;
y = array[++x]; // This will get array[1]
200
Jon Skeet
  • ++x incrémente la valeur, puis l'évalue et la stocke.
  • x++ évalue la valeur, puis l'incrémente et la stocke.
var n = 0, m = 0;

alert(n++); /* Shows 0, then stores n = 1 */
alert(++m); /* Shows 1, then stores m = 1 */

Notez que l'utilisation des ++x dans la mesure du possible, car vous lisez la variable, la modifiez, puis l'évaluez et la stockez. Vers le x++ opérateur où vous lisez la valeur, l'évaluez, la modifiez, puis la stockez.

34
Justin Force

Si je comprends bien, si vous les utilisez seuls, ils font la même chose. Si vous essayez d'en sortir le résultat sous forme d'expression, ils peuvent différer. Essayez alert (i ++) par rapport à alert (++ i) pour voir la différence. i ++ évalue à i avant l'ajout et ++ i fait l'ajout avant l'évaluation.

Voir http://jsfiddle.net/xaDC4/ pour un exemple.

6
Chris

Je pensais à cette lecture hier cette réponse à la question concernant mauvaises hypothèses en C/C++ . Dans tous les cas, pouvons-nous garantir que Javascript se comporte de cette façon? Ou pensez-vous que c'est une mauvaise pratique d'utiliser la déclaration d'incrémentation dans une déclaration plus complexe?

1
palswim
var x = 0, y = 0;

//post-increment: i++ returns value then adds one to it
console.log('x++ will log: ', x++); //0
console.log('x after x++ : ', x);    //1

//pre-increment: adds one to the value, then returns it
console.log('++y will log: ', ++y); //1
console.log('y after ++y : ', y);   //1
0
cacoder
var a = 1;
var b = ++a;
alert('a:' + a + ';b:' + b); //a:2;b:2

var c = 1;
var d = c++;
alert('c:' + c + ';d:' + d); //c:2;d:1

jsfiddle

0
The Code Guy