In a Zen-like manner, NaN isn’t equal to anything, even itself. So comparisons (>, <, >=, <=) where one
operand is NaN or evaluates to NaN always return false. Specifically, undefined and objects that
cannot be converted to numbers evaluate to NaN when used in numerical comparisons.
This rule raises an issue when there is at least one path through the code where one of the operands to a comparison is NaN,
undefined or an Object which cannot be converted to a number.
Noncompliant code example
var x; // x is currently "undefined"
if (someCondition()) {
x = 42;
}
if (42 > x) { // Noncompliant; "x" might still be "undefined"
doSomething();
}
var obj = {prop: 42};
if (obj > 24) { // Noncompliant
doSomething();
}
Compliant solution
var x;
if (someCondition()) {
x = 42;
} else {
x = foo();
}
if (42 > x) {
doSomething();
}
var obj = {prop: 42};
if (obj.prop > 24) {
doSomething();
}