++ someVariable против someVariable ++ в JavaScript - PullRequest
114 голосов
/ 12 августа 2010

В JavaScript вы можете использовать оператор ++ перед ( предварительным приращением ) или после имени переменной ( после приращения ). В чем, если таковые имеются, различия между этими способами приращения переменной?

Ответы [ 6 ]

194 голосов
/ 12 августа 2010

То же, что и в других языках:

  • ++x (предварительное увеличение) означает «увеличение переменной; значение выражения является окончательным значением»
  • x++ (постинкремент) означает «запомнить исходное значение, а затем увеличить переменную; значение выражения равно исходному значению»

Теперь при использовании в качестве отдельного выражения они означают одно и то же:

x++;
++x;

Разница возникает, когда вы используете значение выражения в другом месте.Например:

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

x = 0;
y = array[++x]; // This will get array[1]
34 голосов
/ 12 августа 2010
  • ++x увеличивает значение, затем оценивает и сохраняет его.
  • x++ оценивает значение, затем увеличивает и сохраняет его.
var n = 0, m = 0;

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

Обратите внимание, что использование ++x по возможности дает небольшие преимущества в производительности, поскольку вы читаете переменную, изменяете ее, затем оцениваете и сохраняете.По сравнению с оператором x++, где вы читаете значение, оцениваете его, изменяете и сохраняете.

6 голосов
/ 12 августа 2010

Как я понимаю, если вы используете их автономно, они делают то же самое.Если вы попытаетесь вывести их результат в виде выражения, они могут отличаться.Попробуйте alert (i ++) по сравнению с alert (++ i), чтобы увидеть разницу.i ++ оценивает i перед сложением, а ++ i добавляет перед оценкой.

См. http://jsfiddle.net/xaDC4/ для примера.

1 голос
/ 12 августа 2010

Я думал об этом вчера, читая этот ответ на вопрос о неверных предположениях в C / C ++ . Во всех случаях, можем ли мы гарантировать, что Javascript ведет себя таким образом? Или вы считаете плохой практикой вообще использовать оператор приращения в более сложном выражении?

0 голосов
/ 16 ноября 2017
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 голосов
/ 17 марта 2016
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
...