== Why is this an issue? 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 [source,javascript] ---- 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 [source,javascript] ---- var x; if (someCondition()) { x = 42; } else { x = foo(); } if (42 > x) { doSomething(); } var obj = {prop: 42}; if (obj.prop > 24) { doSomething(); } ---- ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) === Message Re-evaluate the data flow; this operand of a numeric comparison could be {"undefined"|an Object}. === Highlighting Primary: Expression Secondary: Path that puts comparison var in bad state ''' == Comments And Links (visible only on this page) === on 18 Oct 2016, 10:54:41 Pierre-Yves Nicolas wrote: Similarly to RSPEC-3757, we may raise a false positive if the object has a ``++valueOf++`` method (which is the case for ``++Date++`` which we already exclude). We will refine that if the currently described behavior raises too many false positives. endif::env-github,rspecator-view[]