В JavaScript вы можете использовать оператор ++
до ( pre-increment ) или после имени переменной ( post -increment ). В чем, если есть, различия между этими способами приращения переменной?
Как и в других языках:
++x
(pre-increment) означает "увеличить переменную; значение выражения - конечное значение"x++
(post-increment) означает "запомнить исходное значение, затем увеличить переменную; значение выражения - исходное значение"Теперь, когда они используются в качестве отдельного оператора, они означают одно и то же:
x++;
++x;
Разница возникает, когда вы используете значение выражения в другом месте. For example:
x = 0;
y = array[x++]; // This will get array[0]
x = 0;
y = array[++x]; // This will get array[1]
Я думал об этом вчера, читая этот ответ на вопрос о плохих предположениях в C/C++. Во всех ли случаях мы можем гарантировать, что Javascript ведет себя именно так? Или вы считаете, что использовать оператор инкремента внутри более сложного оператора вообще плохая практика?
.++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++
, где вы читаете значение, оцениваете его, изменяете, а затем сохраняете.
Насколько я понимаю, если вы используете их отдельно, они делают то же самое. Если вы попытаетесь вывести их результат в виде выражения, они могут отличаться. Попробуйте использовать alert (i ++) по сравнению с alert (++ i), чтобы увидеть разницу. i ++ вычисляет i перед добавлением, а ++ i выполняет сложение перед вычислением.
См. http://jsfiddle.net/xaDC4/ для примера.