0

在 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/

4

3 回答 3

1

这是因为++在变量返回值之后,然后递增它。

所以在第一个例子中,temp++左边是 1 temp,右边是 2。

在第二个例子中,tempandtemp++都是 1。

于 2013-02-21T12:39:33.977 回答
1

这很简单。

第一个temp是递增的,但因为它是一个递增运算符,所以表达式的左侧 (LHS) 仍然计算为其原始值。然后评估右侧(RHS),但temp已经增加,因此它具有新值。然后比较 LHS 和 RHS - 它们不再相等。

在第二个示例中,增量发生在评估 RHS 之后,因此 LHS 和 RHS 保持相等。

我不会依赖这种行为。在其他语言 ISTR中,当使用自增运算符时,在表达式中多次引用同一变量是明确未定义的行为。

于 2013-02-21T12:40:34.337 回答
1

它与操作的顺序有关。以下是比较中发生的情况:

  • 评估左侧表达式。
  • 评估右侧表达式。
  • 看看两者是否相等。

后增量运算符 ( ++) 返回一个值,然后将变量递增 1。因此,在第一种情况下,第一个 temp 的值为 1,但在计算右侧之前它递增到 2。在第二种情况下,增量发生在已经获得双方的值之后。

请注意,这种行为并非在所有语言中都是正确的——实现方式各不相同。

于 2013-02-21T12:41:07.350 回答