In Javascript è possibile utilizzare l'operatore ++
prima o dopo il nome della variabile. Quali sono le differenze tra questi modi di incrementare una variabile?++ some Varianble vs. someVariable ++ in Javascript
risposta
Uguale in altre lingue:
++x
(pre-incremento) significa "incrementare la variabile, il valore dell'espressione è il valore finale"x++
(post-incremento) significa "il ricordo il valore originale, quindi incrementare la variabile, il valore dell'espressione è il valore originale"
Ora, quando viene utilizzato come una dichiarazione standalone, che significano la stessa cosa:
x++;
++x;
La differenza viene quando si utilizza 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]
Maledizioni , Ti ho quasi picchiato a una risposta se non avessi smesso di caricare una risposta pratica di jsfiddle. ;-) – Chris
Che aspetto avrebbe questo se usassi '+ 1' invece di' ++ '? C'è un modo per aumentare prima o dopo l'aggiunta di numeri? – Keavon
Vorrei sapere perché se si esegue questa operazione const r1 = (x ++) + (x ++); non produce il risultato atteso secondo il tuo esempio. –
Mi pare di capire se li si utilizza standalone che 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.
++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 */
Nota che ci sono lievi vantaggi prestazionali di utilizzare ++x
, ove possibile, a causa di leggere la variabile, modificarlo, quindi valutare e conservarla. Contro l'operatore x++
in cui leggi il valore, lo valuti, lo modifichi, quindi lo memorizzi.
stavo pensando a questo ieri leggendo this response alla domanda su bad assumptions 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?
Guardando all'ECMA-262, sembra ragionevolmente ben specificato. –
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
Vedi anche la lingua-agnostic [Differenza tra i ++ e ++ i in un ciclo?] (Http://stackoverflow.com/q/484462/1048572) – Bergi