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;
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;
似乎开箱即用的Node.js不支持isNaN()。
我与
var value = 1;
if (parseFloat(stringValue)+"" !== "NaN") value = parseFloat(stringValue);
NaN === NaN; // false
Number.NaN === NaN; // false
isNaN(NaN); // true
isNaN(Number.NaN); // true
相等运算符(==和===)不能用于针对NaN测试值。
查看Mozilla文档。全局NaN属性是一个表示Not-A-Numbe的值
最好的方法是使用内置函数“ isNaN()”来检查NaN。所有浏览器都支持该方式。
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
我刚刚在有效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
根据IEEE 754,除!=之外,所有涉及NaN的关系都评估为false。因此,例如,如果A或B或两者均为NaN,则(A> = B)=假,(A <= B)=假。