我正在努力理解增量运算符。此运算符将其操作数递增(加一)并返回一个值。我在操作数(x++)之后使用了带有运算符的后缀,因此它在递增之前返回值。
因此,如果 x 为 3,则语句 y = x++ 将 y 设置为 3 并将 x 递增为 4
var x = 3;
var y = x++;
console.log(x); // 4
console.log(y); // 3
我不明白为什么y
不保持值 4 而是设置为 3,以及为什么x
在分配值为 3 时保持值 4。
我正在努力理解增量运算符。此运算符将其操作数递增(加一)并返回一个值。我在操作数(x++)之后使用了带有运算符的后缀,因此它在递增之前返回值。
因此,如果 x 为 3,则语句 y = x++ 将 y 设置为 3 并将 x 递增为 4
var x = 3;
var y = x++;
console.log(x); // 4
console.log(y); // 3
我不明白为什么y
不保持值 4 而是设置为 3,以及为什么x
在分配值为 3 时保持值 4。
post -increment 运算符在取值后递增。这就是它与预增量运算符的不同之处。
通过遵循Alex的评论,这个问题得到了改进。
假设有一个变量x
sa var x=3
。
案例1 当你写:
var y = x++;
然后,完成以下步骤:
x
评估变量(x
为 3);x
递增(x
为 4);y
(因此将结果y=3
);案例 2 当你写: var y = ++x;
然后,完成以下步骤:
x
递增(x
为 4);x
评估变量(x
为 4);y
(因此将结果y=4
);在这种情况下,遵循 Javascript 的运算符优先级很重要(例如,在此处查看更多信息)。
CASE 3 为了完整起见,正如Alex所观察到的,同样重要的是要认识到,如果CASE1中提供的步骤对同一个变量重复,那么变量将递增然后恢复到初始值,即当你写:
x = x++;
然后,完成以下步骤:
x
评估变量(x
为 3);x
递增(x
为 4);x
(因此将结果x=3
);var y = x++;
是这两个语句的简写(按顺序):
var y = x;
x = x + 1;
如果您希望 y 等于 4,您将执行以下操作:
var y = ++x;
这是以下的简写:
x = x + 1;
var y = x;
++(增量)
增量运算符的使用如下:
var++ 或 ++var
此运算符将其操作数递增(加一)并返回一个值。如果使用后缀,操作数后面有运算符(例如,x++),则返回递增前的值。如果在操作数之前使用带运算符的前缀(例如 ++x),则返回递增后的值。
例如,如果 x 为 3,则语句 y = x++ 将 y 设置为 3 并将 x 递增至 4。如果 x 为 3,则语句 y = ++x 将 x 递增至 4 并将 y 设置为 4。
++
after 变量是一个后自增运算符,表示在读取变量后执行自增。
见:http ://en.wikipedia.org/wiki/Increment_and_decrement_operators
x++
在制作 x 的值的临时副本并返回临时副本之后发生增量。相反的是 ++x ,它是一个增量并返回新值:
var x = 3;
var y = ++x; // y === 4
来自ECMA 5.1的引用:
PostfixExpression : LeftHandSideExpression LeftHandSideExpression [此处无 LineTerminator] ++ LeftHandSideExpression [此处无 LineTerminator] -- 70 © Ecma International 2011
11.3.1 后缀增量运算符 产生式 PostfixExpression : LeftHandSideExpression [此处没有 LineTerminator] ++ 的计算方法如下: 1. 令 lhs 为计算 LeftHandSideExpression 的结果。2. 如果以下条件全部为真,则抛出 SyntaxError 异常: Type(lhs) is Reference is true IsStrictReference(lhs) is true Type(GetBase(lhs)) is Environment Record GetReferencedName(lhs) is "eval " 或 "参数" 3. 让 oldValue 为 ToNumber(GetValue(lhs))。4. 使用与 + 运算符相同的规则(参见 11.6.3),让 newValue 为将值 1 与 oldValue 相加的结果。5. 调用 PutValue(lhs, newValue)。6. 返回旧值。
x++
是 * post *increment 运算符。它相当于:
var tmp = x;
x = x + 1;
return tmp;
这是旧 C 时代的遗留物,人们喜欢编写如下代码:
while(*dest++ = *src++);
(翻译:将内存范围复制到第一个 0 字节)。还有一个 * pre *increment 运算符++ x
,它先递增,然后返回递增的结果。
有两种增加方式
var y = x++; // first make the allocation then the increasing
// and
var y = ++x; // first make the increasing then the allocation
var y = x++;
表示x
是递增的,并被y
赋予 的递增值x
。
var y = ++x;
表示它x
被递增,并被y
分配了 的预递增值x
。