46 lines
1.0 KiB
Plaintext
46 lines
1.0 KiB
Plaintext
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();
|
|
}
|
|
----
|
|
|