我只在Firefox的JavaScript控制台中尝试过,但以下语句都没有返回true:

parseFloat('geoff') == NaN;

parseFloat('geoff') == Number.NaN;

当前回答

要修复'1.2geoff'被解析的问题,只需使用Number()解析器即可。

所以与其这样:

parseFloat('1.2geoff'); // => 1.2
isNaN(parseFloat('1.2geoff')); // => false
isNaN(parseFloat('.2geoff')); // => false
isNaN(parseFloat('geoff')); // => true

这样做:

Number('1.2geoff'); // => NaN
isNaN(Number('1.2geoff')); // => true
isNaN(Number('.2geoff')); // => true
isNaN(Number('geoff')); // => true

编辑:我刚刚注意到另一个问题…传入Number()的false值(true为实布尔值)返回为0!那样的话……相反,parseFloat每次都有效。所以回到这个问题:

function definitelyNaN (val) {
    return isNaN(val && val !== true ? Number(val) : parseFloat(val));
}

这似乎涵盖了一切。我测试它比lodash的_慢90%。是NaN,但它并没有涵盖所有的NaN:

http://jsperf.com/own-isnan-vs-underscore-lodash-isnan

只是为了澄清,我的关心人类字面解释的东西是“不是一个数字”和lodash的关心计算机字面解释的检查,如果什么是“NaN”。

其他回答

你应该使用全局isNaN(value)函数调用,因为:

支持跨浏览器 有关文档,请参阅isNaN

例子:

 isNaN('geoff'); // true
 isNaN('3'); // false

我希望这对你有所帮助。

两种都试试看

if(isNaN(parseFloat('geoff'))  && typeof(parseFloat('geoff')) === "number");
//true

规则是:

NaN != NaN

isNaN()函数的问题是,在某些情况下,它可能会返回意想不到的结果:

isNaN('Hello')      //true
isNaN('2005/12/12') //true
isNaN(undefined)    //true
isNaN('NaN')        //true
isNaN(NaN)          //true
isNaN(0 / 0)        //true

检查该值是否真的为NaN的更好方法是:

function is_nan(value) {
    return value != value
}

is_nan(parseFloat("geoff"))

试试下面的代码:

isNaN(parseFloat("geoff"))

要检查是否有任何值是NaN,而不仅仅是数字,请参阅这里:如何在Javascript中测试NaN ?

使用以下代码:

isNaN('geoff');

参见MDN上的isNaN()文档。

alert ( isNaN('abcd'));  // alerts true
alert ( isNaN('2.0'));  // alerts false
alert ( isNaN(2.0));  // alerts false