我只在Firefox的JavaScript控制台中尝试过,但以下语句都没有返回true:
parseFloat('geoff') == NaN;
parseFloat('geoff') == Number.NaN;
我只在Firefox的JavaScript控制台中尝试过,但以下语句都没有返回true:
parseFloat('geoff') == NaN;
parseFloat('geoff') == Number.NaN;
当前回答
两种都试试看
if(isNaN(parseFloat('geoff')) && typeof(parseFloat('geoff')) === "number");
//true
其他回答
似乎在Node.js中,isNaN()是不被开箱即用的。 我曾经和
var value = 1;
if (parseFloat(stringValue)+"" !== "NaN") value = parseFloat(stringValue);
函数isNotANumber(n) { If (typeof n !== 'number') { 返回true; } == n; }
我在StackOverflow上写了另一个问题的答案,当NaN == null时,另一个检查,但它被标记为重复,所以我不想浪费我的工作。
看看关于NaN的Mozilla开发者网络。
简短的回答
只要使用距离|| 0当你想确保你的值是一个正确的数字或isNaN()检查它。
长回答
NaN (Not-a-Number)是javascript中一个奇怪的全局对象,当某些数学操作失败时,经常返回。
你想检查NaN == null,结果是false。然而,即使NaN == NaN结果为假。
判断变量NaN是否为全局函数的一个简单方法是NaN()。
另一个是x !== x,仅当x为NaN时才成立。(感谢提醒@raphael-schweikert)
但为什么这个简短的答案管用呢?
让我们一探究竟。
当你调用NaN == false时,结果是假的,NaN == true也是一样。
在规范中,JavaScript有一个总是false值的记录,包括:
NaN -不是一个数字 "" -空字符串 False -布尔值为False Null - Null对象 Undefined -未定义的变量 0 -数字0,包括+0和-0
如果您的环境支持ECMAScript 2015,那么您可能需要使用Number。isNaN来确保这个值真的是NaN。
isNaN的问题是,如果你将它用于非数值数据,就会应用一些令人困惑的规则(根据MDN)。例如,
isNaN(NaN); // true
isNaN(undefined); // true
isNaN({}); // true
因此,在ECMA Script 2015支持的环境中,您可能希望使用
Number.isNaN(parseFloat('geoff'))
NaN是一个特殊的值,不能这样测试。我想和大家分享一个有趣的事情
var nanValue = NaN;
if(nanValue !== nanValue) // Returns true!
alert('nanValue is NaN');
这只对NaN值返回true,是一种安全的测试方式。肯定应该被包装在一个函数中,或者至少被注释,因为测试相同的变量是否彼此不相等显然没有多大意义,呵呵。