++ someVariable vs. someVariable ++ у JavaScript


135

В JavaScript ви можете використовувати ++оператор до ( попереднє збільшення ) або після назви змінної ( після збільшення ). Які, якщо такі є, відмінності між цими способами збільшення змінної?


1
Дивіться також мовно-агностичну різницю між i ++ та ++ i в циклі?
Бергі

Я думав про це вчора, читаючи цю відповідь на питання про погані припущення в C / C ++ . Чи можемо ми гарантувати, що Javascript так поводиться? Або ви вважаєте, що погана практика взагалі використовувати оператор приросту в складнішому операторі?
palswim

Попередній коментар - це фактично копія відповіді (скоріше невідповіді), яку я опублікував у 2010 році . Я видалив відповідь, але Джон Скіт відповів : "Дивлячись на ECMA-262, це здається досить чітко визначеним".
palswim

Відповіді:


242

Те саме, що і в інших мовах:

  • ++x (попередній приріст) означає "приріст змінної; значення виразу є кінцевим значенням"
  • x++ (пост-приріст) означає "запам'ятати початкове значення, потім збільшити змінну; значення виразу - початкове значення"

Тепер, коли вони використовуються як окремий вислів, вони означають те саме:

x++;
++x;

Різниця виникає, коли ви використовуєте значення виразу в іншому місці. Наприклад:

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

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

13
Прокльони, я ледве не побив вас у відповідь, якби я не переставав завантажувати практичну відповідь на jsfiddle. ;-)
Кріс

2
Як це виглядало б, якби ви використовували + 1замість цього ++? Чи існує спосіб збільшення до чи після додавання чисел?
Keavon

Я хотів би знати, чому, якщо ви робите цю операцію const r1 = (x ++) + (x ++); це не дає очікуваного результату за вашим прикладом.
Жан Хіменес

1
@JeanJimenez: Ну це дає результат, який я очікую. Наприклад, якщо значення xпочинається з 10, значення r1становить 21, що становить 10 + 11. Значення першого x++виразу становить 10 і xзбільшується до 11. Значення другого x++виразу 11 та xзбільшується до 12.
Джон Скіт

Шановний @JonSkeet, дякую за надзвичайно швидку відповідь, я новачок у вивченні JavaScript, і моє плутанина стосується того, чому один приріст, а інший - ні.
Жан Хіменес

43
  • ++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++оператора, де ви читаєте значення, оцінюйте його, модифікуйте, а потім зберігайте.


7

Як я їх розумію, якщо ви використовуєте їх самостійно, вони роблять те саме. Якщо ви спробуєте вивести результат їх як вираз, то вони можуть відрізнятися. Спробуйте сповістити (i ++) порівняно з попередженням (++ i), щоб побачити різницю. i ++ оцінює i до додавання, і ++ я додає перед оцінкою.

Для прикладу див. Http://jsfiddle.net/xaDC4/ .



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

0

Я маю пояснення щодо розуміння пост-інкрементного та попереднього збільшення. Тож я його тут кладу.

Дозволяє надайте 0Tox

let x = 0;

Почнемо з інкремента

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

Чому?

Дозволяє розбити x++вираз вниз

x = x;
x = x + 1;

Перший оператор повертає значення, xяке є0

І пізніше, коли ви використовуєте xзмінну де завгодно, тоді виконується друге твердження

Друге твердження повертає значення цього x + 1виразу, яке є(0 + 1) = 1

Майте на увазі значення xцього стану, яке є1

Тепер давайте почнемо з попереднього збільшення

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

Чому?

Дозволяє розбити ++xвираз вниз

x = x + 1;
x = x;

Перше твердження повертає значення цього x + 1виразу, яке є(1 + 1) = 2

Друге твердження повертає значення xякого є 2таким, x = 2таким чином воно повертається2

Сподіваємось, це допоможе вам зрозуміти, що таке збільшення та попереднє збільшення!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.