例如这个:
var a = 123;
var b = a++;
现在a
包含124
和b
包含123
我知道 b 取 a 的值,然后 a 递增。但是,我不明白为什么会这样。JavaScript 的创建者想要这个的主要原因。除了让新手感到困惑之外,这样做还有什么好处?
例如这个:
var a = 123;
var b = a++;
现在a
包含124
和b
包含123
我知道 b 取 a 的值,然后 a 递增。但是,我不明白为什么会这样。JavaScript 的创建者想要这个的主要原因。除了让新手感到困惑之外,这样做还有什么好处?
这就是为什么它被称为“后递增运算符”的原因。本质上,一切都是产生值的表达式。a + 1
是一个结果为 124 的表达式。如果你把它赋值给b
with b = a + 1
,b
它的值为 124。如果你不将结果赋值给任何东西,a + 1
仍然会得到值 124,它会被立即丢弃,因为你不会在任何地方“捕捉”它。
顺便说一句,evenb = a + 1
是一个返回 124 的表达式。赋值表达式的结果值是赋值的值。这就是为什么c = b = a + 1
像您期望的那样工作。
无论如何,带有++
and的表达式的特殊之处--
在于,除了返回值外,++
运算符还直接修改变量。所以当你这样做时会发生什么b = a++
,表达式a++
返回值 123 并递增a
。该岗位增量器将首先返回值,然后递增,而预增量器++a
第一增量,则返回值。如果你只是a++
自己写而没有赋值,你不会注意到差异。这a++
就是通常使用的方式,作为a = a + 1
.
这是很标准的。
注意你也可以写
b = ++a;
这具有您可能期望的效果。
重要的是要意识到这里发生了两件事:赋值和增量,语言应该定义它们发生的顺序。由于我们两者都可用++a
,a++
因此它们应该具有不同的含义是有道理的。
对于我们这些有 C 语言背景的人来说,这是很自然的。如果 PHP 的行为不同,我们可能想知道为什么 PHP 选择偏离我们习惯的方式。
++
可以像在你的例子中一样用作后增量运算符,或者如果在变量之前使用它可以用作前增量运算符。
var b = ++a;
然后首先将变量a
递增,然后将递增的值分配给b
。
这是执行此操作的标准方法。后增量运算符分配值,然后递增。
preincrement ( ++a
) 运算符递增然后赋值。
我对 php 不熟悉,不能说它是如何做到的或为什么。
当你把变量放在++
后面时,它会在赋值后递增。您也可以将变量放在++
之前,它会在赋值之前递增。
对于前缀和后缀递增,Javascript 实际上与 PHP 的行为完全相同。