﻿# V7011\. Comparison with 'NaN' is incorrect\. Use 'isNaN\(\)' or 'Number\.isNaN\(\)' method instead\.

Анализатор обнаружил, что в программе происходит сравнение значения с NaN через бинарный оператор\. Поскольку NaN в JavaScript реализован в соответствии со стандартом IEEE 754, результаты сравнения NaN через оператор \=\= или \=\=\= будут всегда возвращать false\. С высокой вероятностью такое сравнение в коде является ошибочным\.

Рассмотрим пример:

```cpp
let a = NaN;
console.log(a == NaN);  // false
console.log(a === NaN); // false

let b = "10"
console.log(b ==  NaN); // false
console.log(b === NaN); // false
```

Независимо от того, какое значение сравнивается с `NaN`, результатом проверки всегда будет `false`\. В случае же, если в качестве оператора сравнения используется `!=` или `!==`, результатом проверки всегда будет `true`\.

Чтобы корректно проверить, является ли какое\-либо значение `NaN`, следует использовать специальные методы [`isNaN()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN) и [`Number.isNaN()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN)\.

Рассмотрим исправленный пример:

```cpp
let a = NaN;
console.log(isNaN(a));        // true
console.log(Number.isNaN(a)); // true

let b = "10"
console.log(isNaN(b)); // false
Number.isNaN(b);       // false
```

Следует отметить разницу между двумя этими методами\.

Метод `isNaN()` возвращает `true` в том случае, если проверяемое значение равно `NaN` или после преобразования к числу станет `NaN`\. Метод `Number.isNaN()`, в свою очередь, не производит преобразования проверяемого значения к числу\. Эту разницу отображает следующий пример:

```cpp
console.log(isNaN("value"));        // true
console.log(Number.isNaN("value")); // false
```