如何检查JavaScript中的数字是否为NaN?

JavaScript KoaJS

Tom凯

2020-03-30

I’ve only been trying it in Firefox’s JavaScript console, but neither of the following statements return true:

parseFloat('geoff') == NaN;

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

第3828篇《如何检查JavaScript中的数字是否为NaN?》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

7个回答
番长猴子 2020.03.30

根据IEEE 754,除!=之外,所有涉及NaN的关系都评估为false。因此,例如,如果A或B或两者均为NaN,则(A> = B)=假,(A <= B)=假。

猪猪 2020.03.30

似乎开箱即用的Node.js不支持isNaN()。
我与

var value = 1;
if (parseFloat(stringValue)+"" !== "NaN") value = parseFloat(stringValue);
米亚 2020.03.30
NaN === NaN;        // false
Number.NaN === NaN; // false
isNaN(NaN);         // true
isNaN(Number.NaN);  // true

相等运算符(==和===)不能用于针对NaN测试值。

查看Mozilla文档。全局NaN属性是一个表示Not-A-Numbe的值

最好的方法是使用内置函数“ isNaN()”来检查NaN。所有浏览器都支持该方式。

达蒙 2020.03.30

我使用下划线isNaN功能,因为在JavaScript中:

isNaN(undefined) 
-> true

至少要注意该陷阱。

古一 2020.03.30

JavaScript中的NaN代表“不是数字”,尽管其类型实际上是数字。

typeof(NaN) // "number"

要检查变量的值为NaN,我们不能简单地使用isNaN()函数,因为isNaN()存在以下问题,请参见下文:

var myVar = "A";
isNaN(myVar) // true, although "A" is not really of value NaN

真正发生的是myVar被隐式强制为数字:

var myVar = "A";
isNaN(Number(myVar)) // true. Number(myVar) is NaN here in fact

这实际上是有道理的,因为“ A”实际上不是数字。但是,我们真正要检查的是myVar是否完全值NaN。

所以isNaN()无济于事。那我们该怎么办呢?

鉴于NaN是唯一一个与自身不相等的JavaScript值,因此我们可以使用!==检查其与自己的相等性。

var myVar; // undefined
myVar !== myVar // false

var myVar = "A";
myVar !== myVar // false

var myVar = NaN
myVar !== myVar // true

因此可以得出结论,如果确实是一个变量!==本身,则该变量的确切值是NaN:

function isOfValueNaN(v) {
    return v !== v;
}

var myVar = "A";
isNaN(myVar); // true
isOfValueNaN(myVar); // false
梅小卤蛋 2020.03.30

我刚刚在有效JavaScript一书中遇到了这种技术,它很简单:

由于NaN是唯一被视为与自己不相等的JavaScript值,因此您始终可以通过检查其与自己的相等性来测试该值是否为NaN:

var a = NaN;
a !== a; // true 

var b = "foo";
b !== b; // false 

var c = undefined; 
c !== c; // false

var d = {};
d !== d; // false

var e = { valueOf: "foo" }; 
e !== e; // false

直到@allsyed发表评论才意识到这一点,但这在ECMA规范中:https ://tc39.github.io/ecma262/#sec-isnan-number

十三 2020.03.30

试试这个代码:

isNaN(parseFloat("geoff"))

要检查是否数值而不是数字而不是数字NaN,请参见此处:如何在Javascript中测试NaN?

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android