Em Javascript, você pode usar o operador ++
antes ou depois do nome da variável. Quais são as diferenças entre essas maneiras de incrementar uma variável?
O mesmo que em outros idiomas:
++x
(pré-incremento) significa “incrementa a variável; o valor da expressão é o valor final” x++
(pós-incremento) significa “lembra o valor original, depois incrementa a variável; o valor da expressão é o valor original” Agora, quando usado como uma declaração independente, eles significam a mesma coisa:
x++; ++x;
A diferença vem quando você usa o valor da expressão em outro lugar. Por exemplo:
x = 0; y = array[x++]; // This will get array[0] x = 0; y = array[++x]; // This will get array[1]
++x
incrementa o valor, então o avalia e armazena. x++
avalia o valor, em seguida, incrementa e armazena. var n = 0, m = 0; alert(n++); /* Shows 0, then stores n = 1 */ alert(++m); /* Shows 1, then stores m = 1 */
Note que há um pequeno benefício no uso de ++x
quando possível, porque você lê a variável, a modifica, avalia e armazena. Versus o operador x++
onde você lê o valor, avalia, modifica e armazena.
Pelo que entendi, se você usá-los autonomamente, eles fazem a mesma coisa. Se você tentar produzir o resultado deles como uma expressão, eles podem ser diferentes. Tente alertar (i ++) em relação ao alerta (++ i) para ver a diferença. i ++ avalia para i antes da adição e ++ i faz a adição antes de avaliar.
Veja http://jsfiddle.net/xaDC4/ para um exemplo.
Eu estava pensando sobre isso ontem lendo essa resposta para a pergunta sobre suposições ruins em C / C ++ . Em todos os casos, podemos garantir que o JavaScript se comporte dessa maneira? Ou você acha que é uma prática ruim usar a instrução de incremento dentro de uma declaração mais complexa?
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