Lint Rules

# useIsNan (since v12.0.0)

Require calls to `isNaN()` when checking for `NaN`.

In JavaScript, `NaN` is a special value of the `Number` type. It’s used to represent any of the “not-a-number” values represented by the double-precision 64-bit format as specified by the IEEE Standard for Binary Floating-Point Arithmetic.

Because `NaN` is unique in JavaScript by not being equal to anything, including itself, the results of comparisons to `NaN` are confusing:

• `NaN` === `NaN` or `NaN` == `NaN` evaluate to false
• `NaN` !== `NaN` or `NaN` != `NaN` evaluate to true

Therefore, use `Number.isNaN()` or global `isNaN()` functions to test whether a value is `NaN`.

Note that `Number.isNaN()` and `isNaN()` have not the same behavior. When the argument to `isNaN()` is not a number, the value is first coerced to a number. `Number.isNaN()` does not perform this coercion. Therefore, it is a more reliable way to test whether a value is `NaN`.

Source: use-isnan.

## Examples

### Invalid

``123 == NaN``
``````nursery/useIsNan.js:1:1 lint/nursery/useIsNan ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

✖ Use the Number.isNaN function to compare with NaN.

> 1 │ 123 == NaN
│ ^^^^^^^^^^
2 │

``````
``123 != NaN``
``````nursery/useIsNan.js:1:1 lint/nursery/useIsNan ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

✖ Use the Number.isNaN function to compare with NaN.

> 1 │ 123 != NaN
│ ^^^^^^^^^^
2 │

``````
``switch(foo) { case (NaN): break; }``
``````nursery/useIsNan.js:1:20 lint/nursery/useIsNan ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

✖ 'case NaN' can never match. Use Number.isNaN before the switch.

> 1 │ switch(foo) { case (NaN): break; }
│                    ^^^^^
2 │

``````
``Number.NaN == "abc"``
``````nursery/useIsNan.js:1:1 lint/nursery/useIsNan ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

✖ Use the Number.isNaN function to compare with NaN.

> 1 │ Number.NaN == "abc"
│ ^^^^^^^^^^^^^^^^^^^
2 │

``````

### Valid

``````if (Number.isNaN(123) !== true) {}

foo(Number.NaN / 2)

switch(foo) {}``````