JavaScript中的==返回相同条件的变量结果

时间:2013-02-21 12:35:54

标签: javascript equality

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

3 个答案:

答案 0 :(得分:1)

这是因为++变量返回值后,然后会增加它。

因此,在第一个示例中,左侧的temp++为1,但右侧的temp为2。

在第二个示例中,temptemp++都是1。

答案 1 :(得分:1)

这很简单。

在第一个中,temp递增,但由于它是 post 增量运算符,表达式的左侧(LHS)仍然计算其原始值。然后评估右侧(RHS),但temp已经递增,因此它具有新值。然后对LHS和RHS进行比较 - 它们不再相等。

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

我不会依赖这种行为。在ISTR的其他语言中,显式 undefined 行为在使用增量运算符时在表达式中多次引用同一个变量。

答案 2 :(得分:1)

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

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

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

请注意,在所有语言中都不会出现这种情况 - 实现方式各不相同。