какое зарезервированное ключевое слово для NaN в javascript?
-
05-09-2019 - |
Вопрос
если я хочу проверить результат выражения, и функция вернет NaN
как я могу это проверить?
примеры: $('amount').value.toInt()!='NaN'
^ не работает, и я предполагаю, что возвращаемое значение не является строкой,
$('amount').value.toInt()!=NaN
^ похоже, тоже не работает, и это кажется очевидным
итак, как мне проверить, не является ли возвращаемое значение числом?
Решение
Значение NaN определяется как неравное всему, включая его самого.Проверьте, равно ли значение NaN с помощью isNaN()
функционируйте, достаточно соответствующим образом.(ECMAScript 6 добавляет Number.isNan()
функция с другой семантикой для нечисловых аргументов, но по состоянию на 2015 год она поддерживается еще не во всех браузерах).
Доступны два встроенных свойства со значением NaN:глобальный NaN
собственность (т.е. window.NaN
в браузерах), и Number.NaN
.Это так не ключевое слово языка.В старых браузерах NaN
свойство может быть перезаписано с потенциально запутанными результатами, но с Стандарт ECMAScript 5 был сделан недоступным для записи.
- Как @some указал в комментариях, существует также глобальная функция isFinite() Исфинит() что может быть полезно.
Другие советы
лучший способ проверить результат числовой операции с помощью 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 (хороший и причудливый язык)
Оператор равенства (== и ===) не может быть использован для проверки значения на соответствие NaN.Вместо этого используйте Number.isNaN() или isNaN().
NaN === NaN; // false
Number.NaN === NaN; // false
isNaN(NaN); // true
isNaN(Number.NaN); // true