了解增量
例如:
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,它会立即被扔掉,因为你不会在任何地方“捕捉”它。
顺便说一句,即使b = a + 1
是一个返回124的表达式。赋值表达式的结果值就是赋值。 这就是为什么c = b = a + 1
如你所期望的那样工作。
无论如何,有关++
和--
的表达式的特殊之处在于,除了返回值外, ++
运算符还会直接修改该变量。 那么当你做b = a++
时会发生什么,表达式a++
返回值123并增加a
。 后增量器首先返回值, 然后递增,而预增量器++a
首先递增,然后返回该值。 如果你只是自己写a++
而没有赋值,你就不会注意到它的差别。 这就是通常使用a++
方式,因为a = a + 1
是a = a + 1
简短的手段。
这是非常标准的。
请注意,你也可以写
b = ++a;
这可能是你可能期待的效果。
认识到这里有两件事是很重要的:分配和增量以及语言应该定义它们将以何种顺序发生。 因为我们既有++a
又有a++
,所以它们应该有不同的含义。
对于我们这些来自C背景的人来说,这很自然。 如果PHP的行为不同,我们可能会想知道为什么PHP选择偏离我们习惯的。
++
可以像你的例子那样用作增量后运算符,或者如果在变量之前使用,它可以用作预增加运算符。
var b = ++a;
然后首先将变量a
递增,然后递增的值被赋值给b
。