lval < rval, when evaluated, does:
- Let r be the result of performing Abstract Relational Comparison lval < rval.
- ReturnIfAbrupt(r).
- If r is undefined, return false. Otherwise, return r.
Although "Abstract Relational Comparison" (ARC) may return undefined, the final result of the evaluation of the < operator is always true or false.
The actual comparison of numbers to other numbers is shown in 6.1.6.1.12 Number::lessThan ( x, y ); see how ARC says:
f. If Type(nx) is the same as Type(ny), return Type(nx)::lessThan(nx, ny).
So nothing below step F in ARC is relevant for these expressions you're checking, because in each of the expressions, you're comparing a number to another number.
0 < NaN fulfills step 2 of lessThan:
If y is NaN, return undefined.
resulting in ARC returning undefined, resulting in a final value of false: If r is undefined, return false..
Infinity < Infinity first fulfills step 6, which is:
If x is +∞, return false.
-Infinity < -Infinity first fulfills step 8, which is:
If y is -∞, return false.