Например, это:
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 также поддерживает пост-инкремент.