为什么(1 < NaN)
会回复false
而不是undefined
(在JavaScript中)?
在“11.8.5抽象关系比较算法”中,它表示如果其中任何一个值为NaN(在ToPrimitive和ToNumber之后,在我的视图中不应影响NaN),结果为undefined
。
在FF和Chrome中我得到:
console.log(1 < NaN);
// false
为什么?
答案 0 :(得分:15)
因为当抽象关系算法返回<
时,false
运算符返回undefined
。见Section 11.8.1:
11.8.1小于运算符(
<
)生产RelationalExpression: RelationalExpression&lt; ShiftExpression 评估如下:
- 让 lref 成为评估 RelationalExpression 的结果。
- 让 lval 为GetValue( lref )。
- 让 rref 成为评估 ShiftExpression 的结果。
- 让 rval 为GetValue( rref )。
- 让 r 成为执行抽象关系比较的结果 lval&lt; RVAL 。 (见11.8.5)
- 如果 r 未定义,请返回 false 。否则,请返回 r 。
醇>
所有关系运算符都是如此。 算法具有undefined
结果,但运算符将其转换为false
。这是有道理的。 1
不是 < NaN
(也不是> NaN
,== NaN
或...... :-))。
(很高兴看到人们阅读规范。)