在if条件中更改temp变量的序列时返回变量result。
var temp=1;
var res=(temp++==temp)?"Equal":"Not Equal";
alert(res); //Not Equal
var res=(temp==temp++)?"Equal":"Not Equal";
alert(res); //Equal
JS小提琴: - http://jsfiddle.net/adiioo7/e9qLK/
答案 0 :(得分:1)
这是因为++
变量返回值后,然后会增加它。
因此,在第一个示例中,左侧的temp++
为1,但右侧的temp
为2。
在第二个示例中,temp
和temp++
都是1。
答案 1 :(得分:1)
这很简单。
在第一个中,temp
递增,但由于它是 post 增量运算符,表达式的左侧(LHS)仍然计算其原始值。然后评估右侧(RHS),但temp
已经递增,因此它具有新值。然后对LHS和RHS进行比较 - 它们不再相等。
在第二个例子中,在评估RHS之后发生增量,因此LHS和RHS保持相等。
我不会依赖这种行为。在ISTR的其他语言中,显式 undefined 行为在使用增量运算符时在表达式中多次引用同一个变量。
答案 2 :(得分:1)
它与操作顺序有关。以下是比较中发生的情况:
postincrement运算符(++
)返回一个值,然后将变量递增1.因此,在第一种情况下,第一个temp的值为1,但在评估右侧之前递增到2 。在第二种情况下,增量发生在已经获得双方的价值之后。
请注意,在所有语言中都不会出现这种情况 - 实现方式各不相同。