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