Существует ли версия оператора +=
, которая выполняет пост-инкремент?
Я понимаю пре- и пост-инкремент в JS (++i
и i++
), а также знаю, что i += n
хочу увеличить на n
, но, насколько я понимаю, оператор +=
является пре-инкрементом. Если я хочу выполнить встроенный пост-инкремент более чем на 1, какой оператор мне использовать? Это возможно?
В настоящее время мой подход заключается в простом увеличении переменной в другой строке, но было бы неплохо сделать это встроенным!
Этот вопрос обсуждается на Мете.
По умолчанию оператор +=
имеет преинкремент.
Быстрое использование console.info говорит об этом:
let i=0;
console.info(i++); // 0 (post-increment)
console.info(i); // 1
console.info(++i); // 2 (pre-increment)
console.info(i+=1); // 3 (pre-increment)
Общее решение для пост-инкремента (поведение в стиле i++
, где выражение оценивается как исходное значение i
, а затем i
увеличивается) может и должно заключаться в выполнении приращения в отдельной строке. И пост-инкремент (i++
), и пред-инкремент (++i
), по сути, являются удобными функциями, которые создают путаницу (как ясно показал ваш изначально запутанный вопрос; вы перепутали термины). Каждый раз, когда различие между ними актуально (когда они не стоят отдельно, вне более крупных выражений), это может создать путаницу, поэтому попытка найти больше способов достижения этих эффектов с помощью явно нестандартных обходных путей сопряжена с трудностями.
Вы можете делать глупые трюки, например:
i+=j,i-j
(хотя это потерпит неудачу, если не будет заключено в круглые скобки практически в каждом сценарии) или:
[i,i+=j][0] // Or [i,i+=j].shift()
что безопаснее в более крупных выражениях, поскольку у него нет проблем с приоритетом и не нужно дважды повторять операнд за счет создания и удаления двухэлементного массива (я надеюсь, что JIT-компилятор сможет преобразовать это в эффективная форма, но кто знает?), но это бессмысленно. Просто выполните более широкое выражение, а затем добавьте i+=j
.
Лучшее, что я могу придумать:
i+=n,i-n