为什么JavaScript中的(1< NaN)为false?

时间:2011-07-13 09:41:06

标签: javascript

为什么(1 < NaN)会回复false而不是undefined(在JavaScript中)?

在“11.8.5抽象关系比较算法”中,它表示如果其中任何一个值为NaN(在ToPrimitive和ToNumber之后,在我的视图中不应影响NaN),结果为undefined

在FF和Chrome中我得到:

console.log(1 < NaN);
// false

为什么?

1 个答案:

答案 0 :(得分:15)

因为当抽象关系算法返回<时,false运算符返回undefined。见Section 11.8.1

  

11.8.1小于运算符(<

     

生产RelationalExpression: RelationalExpression&lt; ShiftExpression 评估如下:

     
      
  1. lref 成为评估 RelationalExpression 的结果。
  2.   
  3. lval 为GetValue( lref )。
  4.   
  5. rref 成为评估 ShiftExpression 的结果。
  6.   
  7. rval 为GetValue( rref )。
  8.   
  9. r 成为执行抽象关系比较的结果 lval&lt; RVAL 。 (见11.8.5
  10.   
  11. 如果 r 未定义,请返回 false 。否则,请返回 r
  12.   

所有关系运算符都是如此。 算法具有undefined结果,但运算符将其转换为false。这是有道理的。 1 不是 < NaN(也不是> NaN== NaN或...... :-))。

(很高兴看到人们阅读规范。)