++ someVariable vs. someVariable ++ em Javascript

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