2014-12-06 3 views
0

Я знаю только, чтобы использовать isNaN, чтобы проверить, соответствует ли значение NaN. Действительно ли она надежна?Как вы можете надежно проверить, соответствует ли значение NaN?

+4

Почему бы и нет? – GolezTrol

+0

см. Здесь: https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isNaN –

ответ

2

Свойство NaN представляет собой значение, которое не является числом. Это специальное значение возникает в результате операции, которая не может быть выполнена либо потому, что один из операндов был нечисловым (например, «abc»/4), либо потому, что результат операции не является числовым (например, попытка разделить на ноль).

Хотя это кажется достаточно простым, есть несколько несколько удивительных характеристик NaN, которые могут привести к появлению волосковных ошибок, если они не знают о них.

С одной стороны, хотя NaN означает «не число», его тип, верить этому или нет, номер:

console.log(typeof NaN === "number"); // logs "true" 

Кроме того, NaN по сравнению с чем - даже сам! - ложно:

console.log(NaN === NaN); // logs "false" 

Пол-надежный способ, чтобы проверить, является ли число равно NaN это с встроенной функцией IsNaN(), , но даже при использовании isNaN() is an imperfect solution.

лучшим решения будет либо использовать значение! == значение, которое будет выдавать только true, если значение равно NaN. Кроме того, ES6 предлагает новую функцию Number.isNaN(), которая отличается и более надежной, чем старая глобальная функция isNaN().

+0

Как насчет 'typeof value ===" number "&& isNaN (value)'? – Tomalak

+0

Это хорошее решение. – user2466202