Что зарезервированное ключевое слово для NaN в JavaScript? - PullRequest
8 голосов
/ 18 февраля 2009

если я хочу проверить результат выражения и функция вернет NaN как бы я проверить это?
примеры:
$('amount').value.toInt()!='NaN'
^ не работает, и я предполагаю, что возвращаемое значение не является строкой,
$('amount').value.toInt()!=NaN
^ тоже не работает, и этот кажется очевидным

так, как я могу проверить, возвращаемое значение не является числом?

Ответы [ 3 ]

36 голосов
/ 18 февраля 2009

Значение NaN определено как неравное для всего, включая самого себя. Проверьте, является ли значение NaN с помощью функции isNaN(), соответственно. (ECMAScript 6 добавляет функцию Number.isNan() с другой семантикой для нечисловых аргументов, но она не поддерживается во всех браузерах по состоянию на 2015 г.).

Существует два встроенных свойства, доступных со значением NaN: глобальное свойство NaN (т. Е. window.NaN в браузерах) и Number.NaN. Это , а не ключевое слово языка. В более старых браузерах свойство NaN могло быть перезаписано, что может привести к путанице, но в случае стандарта ECMAScript 5 оно стало недоступным для записи .

  • Как отметил @some в комментариях, есть также глобальная функция isFinite () , которая может быть полезна.
2 голосов
/ 23 сентября 2014

лучший способ проверить результат числовой операции с NaN - это подойти так, Пример:

var x  = 0;
var y  = 0;
var result = x/y;  // we know that result will be NaN value
// to test if result holds a NaN value we should use the following code :

if(result !=result){
console.log('this is an NaN value');
} 

и готово.

Хитрость в том, что NaN нельзя сравнивать с любым другим значением, даже если оно само (NaN! = NaN всегда верно, поэтому мы можем воспользоваться этим и сравнить результат с собой)

это JavaScript (хороший и странный язык)

1 голос
/ 13 мая 2014

Оператор равенства (== и ===) нельзя использовать для проверки значения по NaN. Вместо этого используйте Number.isNaN () или isNaN ().

NaN === NaN;        // false
Number.NaN === NaN; // false
isNaN(NaN);         // true
isNaN(Number.NaN);  // true
...