我正在努力理解增量运算符。此运算符递增(加1)其操作数并返回一个值。我在操作数(x ++)之后使用了postfix和operator,所以它在递增之前返回值。
因此,如果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
保持值为4,当它被赋值为4时3。
答案 0 :(得分:4)
post -increment运算符在获取其值后递增。这就是它与预增量运算符的不同之处。
答案 1 :(得分:2)
通过 Alex 评论来改善问题。
假设有一个变量x
,s.a。 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的运算符优先级非常重要(例如,请参阅更多here)。
案例3 为了完整性,正如 Alex 所观察到的那样,同样重要的是要认识到如果 CASE1 中提供的步骤在同一个变量上重复,那么变量将会增加然后恢复到初始值,即当你写:
x = x++;
然后,完成以下步骤:
x
(x
为3); x
递增(x
为4); x
(因此会产生x=3
); 答案 2 :(得分:2)
var y = x++;
这两个陈述的简写(按顺序):
var y = x;
x = x + 1;
如果你希望y等于4,你会这样做:
var y = ++x;
这是简写:
x = x + 1;
var y = x;
答案 3 :(得分:1)
来自MDN Docs - Arithmetic Operators
++(增量)
增量运算符的用法如下:
var ++或++ var
此运算符递增(加1)其操作数并返回a 值。如果使用postfix,则使用操作符后的操作符(例如, x ++),然后在递增之前返回值。如果使用前缀 在操作数之前使用运算符(例如,++ x),然后返回 递增后的值。
例如,如果x为3,则语句y = x ++将y设置为3和 将x增加到4.如果x为3,则语句y = ++ x递增x 到4并将y设置为4。
答案 4 :(得分:0)
变量之后的++
是后增量运算符,意味着在读取变量后执行增量。
请参阅:http://en.wikipedia.org/wiki/Increment_and_decrement_operators
答案 5 :(得分:0)
在发出x值的临时副本并返回临时副本之后发生x++
的增量。相反的是++ x,它是一个增量并返回新值:
var x = 3;
var y = ++x; // y === 4
引自ECMA 5.1:
PostfixExpression:LeftHandSideExpression LeftHandSideExpression [no 这里的LineTerminator] ++ LeftHandSideExpression [没有LineTerminator 在这里] - 70©Ecma International 2011
11.3.1后缀增量运算符生成PostfixExpression:LeftHandSideExpression [此处没有LineTerminator] ++被评估为 如下: 1.让lhs成为评估LeftHandSideExpression的结果。 2.如果满足以下条件,则抛出SyntaxError异常 true:Type(lhs)是Reference为trueIsStrictReference(lhs)是 trueType(GetBase(lhs))是环境记录 GetReferencedName(lhs)是“eval”或“arguments”.3。使用oldValue 是ToNumber(GetValue(lhs))。 4.让newValue成为添加的结果 值1到oldValue,使用与+运算符相同的规则 (见11.6.3)。 5.调用PutValue(lhs,newValue)。 6.返回oldValue。
答案 6 :(得分:0)
x++
是* post * increment运算符。它相当于:
var tmp = x;
x = x + 1;
return tmp;
这是旧C日的遗留物,人们很乐意编写如下代码:
while(*dest++ = *src++);
(翻译:将内存范围复制到前0个字节)。还有一个* pre *增量运算符++ x
,它先递增,然后返回递增的结果。
答案 7 :(得分:0)
有两种增加方式
var y = x++; // first make the allocation then the increasing
// and
var y = ++x; // first make the increasing then the allocation
答案 8 :(得分:0)
var y = x++;
表示x
递增,y
指定递增值x
。
var y = ++x;
表示x
递增,y
指定预递增值x
。