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

parseFloat('geoff') == NaN;

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

当前回答

只要要测试类型为Number的值是否为NaN,全局函数isNaN将完成工作

isNaN(any-Number);

对于适用于JS中所有类型的通用方法,我们可以使用以下任何一种方法:

ECMAScript-5用户:

#1
if(x !== x) {
    console.info('x is NaN.');
}
else {
    console.info('x is NOT a NaN.');
}

对于使用ECMAScript-6的人:

#2
Number.isNaN(x);

为了在ECMAScript 5和6中保持一致性,我们也可以为Number.isNan使用这个填充

#3
//Polyfill from MDN
Number.isNaN = Number.isNaN || function(value) {
    return typeof value === "number" && isNaN(value);
}
// Or
Number.isNaN = Number.isNaN || function(value) {     
    return value !== value;
}

请查看这个答案了解更多细节。

其他回答

函数isNotANumber(n) { If (typeof n !== 'number') { 返回true; } == n; }

也许还有这个:

function isNaNCustom(value){
    return value.toString() === 'NaN' && 
           typeof value !== 'string' && 
           typeof value === 'number'
}

只要要测试类型为Number的值是否为NaN,全局函数isNaN将完成工作

isNaN(any-Number);

对于适用于JS中所有类型的通用方法,我们可以使用以下任何一种方法:

ECMAScript-5用户:

#1
if(x !== x) {
    console.info('x is NaN.');
}
else {
    console.info('x is NOT a NaN.');
}

对于使用ECMAScript-6的人:

#2
Number.isNaN(x);

为了在ECMAScript 5和6中保持一致性,我们也可以为Number.isNan使用这个填充

#3
//Polyfill from MDN
Number.isNaN = Number.isNaN || function(value) {
    return typeof value === "number" && isNaN(value);
}
// Or
Number.isNaN = Number.isNaN || function(value) {     
    return value !== value;
}

请查看这个答案了解更多细节。

我使用下划线的isNaN函数,因为在JavaScript中:

isNaN(undefined) 
-> true

至少,要意识到这一点。

从ES6开始,Object.is(..)是一个新的实用程序,可以用来测试两个值是否绝对相等:

var a = 3 / 'bar';
Object.is(a, NaN); // true