Domanda ++ alcune Varianble Vs. someVariable ++ in Javascript


In Javascript puoi usare ++ operatore prima o dopo il nome della variabile. Quali sono le differenze tra questi modi di incrementare una variabile?


93
2017-08-12 16:30


origine


risposte:


Come in altre lingue:

  • ++x (pre-incremento) significa "incrementa la variabile, il valore dell'espressione è il valore finale"
  • x++ (post-incremento) significa "ricorda il valore originale, quindi incrementa la variabile, il valore dell'espressione è il valore originale"

Ora, quando usati come affermazione autonoma, significano la stessa cosa:

x++;
++x;

La differenza arriva quando usi il valore dell'espressione altrove. Per esempio:

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

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

160
2017-08-12 16:31



  • ++x incrementa il valore, quindi lo valuta e lo memorizza.
  • x++ valuta il valore, quindi lo incrementa e lo memorizza.
var n = 0, m = 0;

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

Si noti che vi sono lievi vantaggi prestazionali nell'uso ++x dove possibile, perché leggi la variabile, la modifica, quindi la valuta e la memorizza. Contro il x++ operatore dove leggi il valore, lo valuti, lo modifichi, quindi lo memorizzi.


23
2017-08-12 16:34



Come li capisco se li usi da soli fanno la stessa cosa. Se provi a generare il risultato di essi come espressione, possono differire. Prova alert (i ++) rispetto all'avviso (++ i) per vedere la differenza. i ++ valuta i prima dell'aggiunta e ++ i fa l'aggiunta prima di valutare.

Vedere http://jsfiddle.net/xaDC4/ per un esempio.


6
2017-08-12 16:34



Stavo pensando a questo ieri a leggere questa risposta alla domanda riguardo ipotesi errate in C / C ++. In tutti i casi, possiamo garantire che Javascript si comporti in questo modo? O pensi che sia una cattiva pratica usare la dichiarazione di incremento in un'istruzione più complessa?


1
2017-08-12 16:41



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
2018-03-17 15:43



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
2017-11-15 21:06