Понимание увеличения

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

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

Другие вопросы по тегам