Понимание приращения

Например:

var a = 123;
var b = a++;

теперь a содержит 124 и b содержит 123

Я понимаю, что b принимает значение a, а затем a увеличивается. Однако я не понимаю, почему это так. Основная причина, по которой создатели JavaScript хотели бы этого. В чем преимущество этого, кроме путаных новичков?

Ответ 1

Вот почему он назвал "пост-инкрементный оператор". По сути, все это выражение, которое приводит к значению. a + 1 - выражение, которое приводит к значению 124. Если вы присваиваете это b с помощью b = a + 1, b имеет значение 124. Если вы не присваиваете результат чему-либо, a + 1 будет по-прежнему в результате получается значение 124, оно просто будет выброшено сразу, так как вы не "поймаете" его где-нибудь.

BTW, даже b = a + 1 - это выражение, которое возвращает 124. Результирующее значение выражения присваивания является назначенным значением. Поэтому c = b = a + 1 работает так, как вы ожидали.

В любом случае особая вещь о выражении с ++ и -- заключается в том, что в дополнение к возврату значения оператор ++ модифицирует переменную напрямую. Итак, что происходит, когда вы выполняете b = a++, выражение a++ возвращает значение 123 и увеличивает a. Инкремент post сначала возвращает значение, , затем увеличивается, а приращение pre инкрементора ++a сначала, затем возвращает значение. Если вы просто написали a++ самостоятельно без назначения, вы не заметите разницы. То, как обычно используется a++, как короткий для a = a + 1.

Это довольно стандартный вариант.

Ответ 2

Обратите внимание, что вы также можете написать

b = ++a;

Какой эффект вы, вероятно, ожидаете.

Важно понимать, что здесь есть две вещи: назначение и приращение, а язык должен определять, в каком порядке они будут происходить. Поскольку у нас есть как ++a, так и a++, имеет смысл, что они должны иметь разные значения.

Для тех из нас, кто находится на фоне C, это вполне естественно. Если PHP ведет себя по-другому, нам может быть интересно, почему PHP решил отклоняться от того, к чему мы привыкли.

Ответ 3

++ может использоваться как оператор пост-инкремента, как в вашем примере, или его можно использовать в качестве оператора предварительного инкремента, если он используется перед переменной.

var b = ++a;

Затем сначала будет увеличена переменная a, затем добавочное значение присваивается b.

Ответ 4

Это стандартный способ сделать это. Оператор postincrement присваивает значение и затем увеличивает его.

Оператор preincrement (++a) увеличивает и затем присваивает.

Я не знаком с php и не могу сказать, как он это делает или почему.

Ответ 5

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

Javascript фактически ведет себя точно так же, как PHP для приращения префикса и постфикса.

Ответ 6

++ до того, как предварительный приращение вызова переменной означает приращение значения переменной перед выполнением оператора.
++ после того, как переменная, называемая post-increment, увеличивает значение переменной после выполнения инструкции.

оба увеличивают значение переменной.

$b=$a++; эквивалентно

$b=$a;//after
$a=$a+1;

$b = ++ $a; `эквивалентен

$a=$a+1;//before
$b=$a;

Другой пример

$a=5;
echo $a++;//prints 5;

$a=5;
echo ++$a;//prints 6;

Ответ 7

Пост-инкремент и предварительное приращение являются общими операторами на многих языках, Javascript составляет около 30 лет от того, чтобы быть первым. PHP также поддерживает пост-инкремент.