了解递增

IT技术 javascript operators
2021-02-17 21:14:29

例如这个:

var a = 123;
var b = a++;

现在a包含124b包含123

我知道 b 取 a 的值,然后 a 递增。但是,我不明白为什么会这样。JavaScript 的创建者想要这个的主要原因。除了让新手感到困惑之外,这样做还有什么好处?

6个回答

这就是为什么它被称为“后递增运算符”的原因。本质上,一切都是产生表达式a + 1是一个结果为 124 的表达式。如果你把它赋值给bwith b = a + 1b它的值为 124。如果你不将结果赋值给任何东西,a + 1仍然会得到值 124,它会被立即丢弃,因为你不会在任何地方“捕捉”它。

顺便说一句,evenb = a + 1是一个返回 124 的表达式。赋值表达式的结果值是赋值的值。这就是为什么c = b = a + 1像您期望的那样工作。

无论如何,带有++and的表达式的特殊之处--在于,除了返回值外,++运算符还直接修改变量。所以当你这样做时会发生什么b = a++,表达式a++返回值 123 并递增a岗位增量器将首先返回值,然后递增,而增量器++a 第一增量,则返回值。如果你只是a++自己而没有赋值,你不会注意到差异。a++就是通常使用的方式,作为a = a + 1.

这是很标准的。

好答案。我的想法是:为什么如果 a = 2 且 b = a + 1 我们得到 b = 3 而 a 保持其原始值。但是自动增量是编程语言中的特殊功能,它不仅仅意味着加 1,这就是我感到困惑的地方,但现在我明白了。
2021-04-27 21:14:29

注意你也可以写

b = ++a;

这具有您可能期望的效果。

重要的是要意识到这里发生了两件事:赋值和增量,语言应该定义它们发生的顺序。由于我们两者都可用++aa++因此它们应该具有不同的含义是有道理的。

对于我们这些有 C 语言背景的人来说,这是很自然的。如果 PHP 的行为不同,我们可能想知道为什么 PHP 选择偏离我们习惯的方式。

++可以像在你的例子中一样用作后增量运算符,或者如果变量之前使用它可以用作前增量运算符

var b = ++a;

然后首先将变量a递增,然后将递增的值分配给b

这是执行此操作的标准方法。后增量运算符分配值,然后递增。

preincrement ( ++a) 运算符递增然后赋值。

我对 php 不熟悉,不能说它是如何做到的或为什么。

当你把变量放在++ 后面时,它会赋值递增您也可以将变量放在++ 之前,它会赋值之前递增

对于前缀和后缀递增,Javascript 实际上与 PHP 的行为完全相同