在 if 条件中更改 temp 变量的序列时会返回变量结果。
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/
在 if 条件中更改 temp 变量的序列时会返回变量结果。
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/
这是因为++
在变量返回值之后,然后递增它。
所以在第一个例子中,temp++
左边是 1 temp
,右边是 2。
在第二个例子中,temp
andtemp++
都是 1。
这很简单。
第一个temp
是递增的,但因为它是一个后递增运算符,所以表达式的左侧 (LHS) 仍然计算为其原始值。然后评估右侧(RHS),但temp
已经增加,因此它具有新值。然后比较 LHS 和 RHS - 它们不再相等。
在第二个示例中,增量发生在评估 RHS 之后,因此 LHS 和 RHS 保持相等。
我不会依赖这种行为。在其他语言 ISTR中,当使用自增运算符时,在表达式中多次引用同一变量是明确未定义的行为。
它与操作的顺序有关。以下是比较中发生的情况:
后增量运算符 ( ++
) 返回一个值,然后将变量递增 1。因此,在第一种情况下,第一个 temp 的值为 1,但在计算右侧之前它递增到 2。在第二种情况下,增量发生在已经获得双方的值之后。
请注意,这种行为并非在所有语言中都是正确的——实现方式各不相同。