在此代码中,第一个警告框显示-3
,我只想到这一点。这怎么可能?至于我对此的了解,应该提醒-2
,我不明白这一点?请
var x = 6; var y=8;
alert(x++-++y);
alert(x);alert(y);
答案 0 :(得分:1)
++
一元运算符 - 来自C的遗留物,可能是B,也许是PL / I - 可以用作预增量或后增量< / em>运算符。如果它在之后放置 l值(变量引用),则表达式的值是之前的变量值。该表达式具有增加变量值并将其存储回来的副作用。
因此:
x++
的值为6
,因为在递增之前,x
的值为++y
的值为9
,因为++
运算符用于预增量变量y
6 - 9
是-3
许多计算机指令集体系结构包括机器寄存器和/或存储器位置的增量前和增量后寻址模式,以便于执行各种任务,特别是从存储器区域加载值并递增地址寄存器以准备获取下一个值。我一直强烈怀疑这些概念向上渗透到更高级别的语言中以提供类似的便利。
答案 1 :(得分:0)
x++ => 6 // postfix
++y => 9 // prefix
所以6 - 9 = -3
根据Postfix / Increment (++) documentation on MDN:
- 如果使用postfix,在操作数之后使用运算符(例如,x ++),则在递增之前返回该值。
- 如果在操作数之前使用了带运算符的前缀(例如,++ x),那么它会在递增后返回值。
答案 2 :(得分:0)
声明x++
和声明++x
之间存在差异。前者将返回x的原始值,而后者将返回x的new
值。
结果,计算结果为6(x的起始值)减去9(y的新值)。
答案 3 :(得分:0)
前导++
将在操作后将值加1,而尾随++
将在操作之前应用它。因此6-9=-3
答案 4 :(得分:0)
x ++在递增之前返回值,6。
++ y在递增后返回值,9。
6 - 9 = -3
答案 5 :(得分:0)
x ++直到操作后才更改x值,因此它是6。
++ y更改操作前的值,因此该值变为9。
因此,第一个警报显示-3。
第二个警报没有帮助,因为您看到现在更改的x(7)值而不是6。