问题描述
我已经在Chrome,Firefox,Safari中进行了测试。这些比较结果都相同。
-
0 < NaN
返回false
。 -
Infinity < Infinity
返回false
。 -
-Infinity < -Infinity
返回false
。
根据Abstract Relational Comparison algorithm,在4h和4i步骤中,以上表达式应返回undefined
,true
,true
。
我在这里想念什么?
解决方法
lval < rval
,在评估时,does:
- 让它成为执行抽象关系比较lval
- ReturnIfAbrupt(r)。
- 如果r未定义,则返回false。否则,返回r。
尽管“抽象关系比较”(ARC)可能返回undefined
,但对<
运算符求值的最终结果始终是true
或false
。
数字与其他数字的实际比较显示在6.1.6.1.12 Number::lessThan ( x,y )中;看看ARC怎么说:
f。如果Type(nx)与Type(ny)相同,则返回
Type(nx)::lessThan(nx,ny).
因此,ARC中步骤F下方的内容与您要检查的这些表达式无关,因为在每个表达式中,您都是将一个数字与另一个数字进行比较。
0 < NaN
完成了lessThan
的第2步:
如果y为NaN,则返回undefined。
导致ARC返回undefined
,最终值为false
:如果r未定义,则返回false。。
Infinity < Infinity
首先执行步骤6,即:
如果x为+∞,则返回false。
-Infinity < -Infinity
首先执行步骤8,即:
如果y为-∞,则返回false。