++ someVariable vs. someVariable ++ no JavaScript

135

Em JavaScript, você pode usar o ++operador antes ( pré-incremento ) ou após o nome da variável ( pós-incremento ). Quais são as diferenças entre essas formas de incrementar uma variável?

Derek Adair
fonte
1
Veja também a diferença
Bergi 11/10
Eu estava pensando sobre isso ontem lendo esta resposta à 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 má prática usar a instrução de incremento em uma instrução mais complexa?
palswim
O comentário anterior é na verdade uma cópia de uma resposta (uma não resposta) que publiquei em 2010 . Excluí a resposta, mas Jon Skeet respondeu com: "Olhando para a ECMA-262, parece razoavelmente bem especificado".
palswim

Respostas:

242

O mesmo que em outros idiomas:

  • ++x (pré-incremento) significa "incrementar a variável; o valor da expressão é o valor final"
  • x++ (pós-incremento) significa "lembre-se do valor original e depois aumente a variável; o valor da expressão é o valor original"

Agora, quando usado como uma declaração autônoma, eles significam a mesma coisa:

x++;
++x;

A diferença ocorre 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]
Jon Skeet
fonte
13
Maldições, eu quase te venci em uma resposta, se eu não tivesse parado para carregar uma resposta prática e simples. ;-)
Chris
2
Como isso seria se você usasse em + 1vez de ++? Existe uma maneira de incrementar antes ou depois ao adicionar números?
Keavon
Gostaria de saber por que, se você fizer esta operação const r1 = (x ++) + (x ++); não produz o resultado esperado de acordo com o seu exemplo.
19716 Jean Jimenez
1
@ JeanJimenez: Bem, produz o resultado que eu espero. Por exemplo, se xcomeça com 10, o valor de r121 é 10 + 11. O valor da primeira x++expressão é 10 e xé incrementado a 11. O valor da segunda x++expressão é 11 e xé incrementado a 12.
Jon Skeet
Caro @JonSkeet, obrigado por essa resposta super rápida, sou novo em aprender JavaScript e minha confusão é sobre por que um aumenta e o outro não.
19716 Jean Jimenez
43
  • ++x incrementa o valor, avalia e armazena.
  • x++ avalia o valor, depois incrementa e armazena.
var n = 0, m = 0;

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

Observe que há pequenos benefícios de desempenho em usar sempre ++xque possível, porque você lê a variável, modifica-a e depois avalia e armazena-a. Versus o x++operador onde você lê o valor, avalia, modifica e armazena.

Justin Force
fonte
7

Pelo que entendi, se você usá-los autônomos, eles fazem a mesma coisa. Se você tentar gerar o resultado deles como uma expressão, eles poderão ser diferentes. Experimente o alerta (i ++) em comparação com o alerta (++ i) para ver a diferença. O i ++ avalia i antes da adição e ++ i faz a adição antes de avaliar.

Veja http://jsfiddle.net/xaDC4/ para um exemplo.

Chris
fonte
2
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

The Code Guy
fonte
0
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
cacoder
fonte
0

Eu tenho uma explicação para entender pós-incremento e pré-incremento. Então, eu estou colocando aqui.

Permite atribuir 0ax

let x = 0;

Vamos começar com pós-incremento

console.log(x++); // Outputs 0

Por quê?

Vamos quebrar a x++expressão

x = x;
x = x + 1;

A primeira instrução retorna o valor xque é0

E mais tarde, quando você usa a xvariável em qualquer lugar, a segunda instrução é executada

A segunda declaração retorna o valor dessa x + 1expressão que é(0 + 1) = 1

Lembre-se do valor xnesse estado que é1

Agora vamos começar com o pré-incremento

console.log(++x); // Outputs 2

Por quê?

Vamos quebrar a ++xexpressão

x = x + 1;
x = x;

A primeira instrução retorna o valor dessa x + 1expressão que é(1 + 1) = 2

Segunda declaração retorna o valor de xque é 2assim, x = 2portanto, retorna2

Espero que isso ajude você a entender o que são pós-incremento e pré-incremento!

unclexo
fonte