V7011. Comparison with 'NaN' is incorrect. Use 'isNaN()' or 'Number.isNaN()' method instead.
Анализатор обнаружил, что в программе происходит сравнение значения с NaN через бинарный оператор. Поскольку NaN в JavaScript реализован в соответствии со стандартом IEEE 754, результаты сравнения NaN через оператор == или === будут всегда возвращать false. С высокой вероятностью такое сравнение в коде является ошибочным.
Рассмотрим пример:
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() и Number.isNaN().
Рассмотрим исправленный пример:
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(), в свою очередь, не производит преобразования проверяемого значения к числу. Эту разницу отображает следующий пример:
console.log(isNaN("value")); // true
console.log(Number.isNaN("value")); // false