Понимание увеличения
Например это:
var a = 123;
var b = a++;
сейчас a
содержит 124
а также b
содержит 123
Я понимаю, что b принимает значение a, а затем a увеличивается. Однако я не понимаю, почему это так. Основная причина того, почему создатели JavaScript захотят этого. В чем преимущество этого, кроме путаницы новичков?
7 ответов
Вот почему это называется "постинкрементный оператор". По сути, все это выражение, которое приводит к значению. a + 1
является выражением, которое приводит к значению 124. Если вы присваиваете это b
с b = a + 1
, b
имеет значение 124. Если вы ничего не назначаете результат, a + 1
будет по-прежнему приводить к значению 124, оно будет сразу же выброшено, поскольку вы его нигде не "поймаете".
Кстати, даже b = a + 1
является выражением, которое возвращает 124. Результирующее значение выражения присваивания является присвоенным значением. Вот почему c = b = a + 1
работает так, как вы ожидаете.
Во всяком случае, особенность выражения с ++
а также --
является то, что в дополнение к возвращению значения, ++
Оператор изменяет переменную напрямую. Итак, что происходит, когда вы делаете b = a++
есть выражение a++
возвращает значение 123 с шагом a
, Пост инкрементор сначала возвращает значение, затем увеличивает, а предварительный инкрементор ++a
сначала увеличивает, затем возвращает значение. Если вы только что написали a++
само по себе без назначения, вы не заметите разницу. Вот как a++
обычно используется, как сокращение для a = a + 1
,
Это довольно стандартно.
Обратите внимание, что вы также можете написать
b = ++a;
Который имеет эффект, который вы, вероятно, ожидаете.
Важно понимать, что здесь происходит две вещи: назначение и приращение, и язык должен определять, в каком порядке они будут происходить. Как мы имеем в наличии оба ++a
а также a++
имеет смысл, что они должны иметь разные значения.
Для тех из нас, кто из C-фона, это вполне естественно. Если PHP ведет себя по-другому, нам может быть интересно, почему PHP решил отклониться от того, к чему мы привыкли.
++
может использоваться как оператор постинкремента, как в вашем примере, или он может использоваться как оператор преинкремента, если используется перед переменной.
var b = ++a;
Затем сначала переменная a
будет увеличен, тогда увеличенное значение присваивается b
,
Это стандартный способ сделать это. Оператор постинкремента присваивает значение, а затем увеличивает его.
Преинкремент (++a
) оператор увеличивает и затем назначает.
Я не знаком с php и не могу сказать, как он это делает и почему.
++
перед вызовом переменной предварительное увеличение означает увеличение значения переменной перед выполнением оператора.++
переменная после пост-инкремента означает увеличение значения переменной после выполнения оператора.
оба увеличивают значение переменной.
$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 на самом деле ведет себя точно так же, как PHP для приращения префикса и постфикса.
Постинкремент и преинкремент - обычные операторы во многих языках, а Javascript составляет около 30 лет от первого. PHP также поддерживает постинкремент.