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

Например, это:

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

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

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

Вот почему он называется «пост-инкрементный оператор». По сути, все это выражение, которое приводит к значению. 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 . Пост- инкремент сначала возвращает значение, затем увеличивает, а pre incrementor ++a сначала увеличивает, а затем возвращает значение. Если вы просто написали a++ самостоятельно без назначения, вы не заметите разницы. Вот как обычно используется a++ , как коротко для a = a + 1 .

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

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

 b = ++a; 

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

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

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

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

 var b = ++a; 

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

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

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

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

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

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

++ до того, как предварительный приращение вызова переменной означает приращение значения переменной перед выполнением инструкции.
++ после того, как переменная, называемая 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; 

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