Question

En JavaScript, vous pouvez utiliser l'opérateur de ++ avant ( pré-incrément ) ou après le nom de variable ( post-incrément ). Qu'est-ce que, le cas échéant, sont les différences entre ces modes de incrémenter une variable?

Était-ce utile?

La solution

Comme dans d'autres langues:

  • ++x (pré-incrément) signifie « incrémenter la variable, la valeur de l'expression est la valeur finale »
  • x++ (post-incrément) signifie « se rappeler la valeur d'origine, alors incrémenter la variable, la valeur de l'expression est la valeur originale »

lorsqu'il est utilisé comme une déclaration autonome, ils veulent dire la même chose:

x++;
++x;

La différence vient quand 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]

Autres conseils

  • incréments de ++x la valeur, puis évalue et stocke.
  • x++ évalue la valeur, puis par incréments et le stocke.
var n = 0, m = 0;

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

Notez qu'il ya des avantages légers de performance à l'aide ++x lorsque cela est possible, parce que vous lisez la variable, la modifier, puis d'évaluer et de le stocker. Par rapport à l'opérateur x++ où vous lisez la valeur, évaluer, modifier, puis le stocker.

Comme je les comprends si vous les utilisez standalone ils font la même chose. Si vous essayez de sortir le résultat d'entre eux comme une expression qu'ils peuvent alors varier. Essayez d'alerte (i ++) par rapport à l'alerte (++ i) pour voir la différence. i ++ i est évaluée comme avant l'addition et i ++ ne l'addition avant d'évaluer.

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

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

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top