在Node.js中,Number.isNaN('asd') === false!为什么?

3

试一试:在Node.js或Firefox中打开REPL,并键入:

Number.isNaN('asdf');

这怎么可能不是NaN呢?如果不是NaN,那它又是什么呢?

顺便提一下,我强烈推荐这个很棒的JSConf演讲 - "Everything you never wanted to know about JavaScript numbers -- JSConf EU 2013" https://www.youtube.com/watch?v=MqHDDtVYJRI。它以任何人都能理解的方式解释了JS中“Number”实现的低级(位级)细节。 - Mörre
Number.isNaN(Number('asdf')) - zamnuts
5个回答

3
您有一个误解。事实上,NaN表示“不是数字”,但这并不意味着任何不是数字的东西都是NaNNaN是浮点运算中的一个特殊值,表示操作的结果未定义。例如,0 / 0通常会得到NaN作为结果。
更多信息请参见这里这里

我试图做什么,Number.isNaN(parseInt('asd')) 是什么? - user3025492
它检查您传递的值是否为“NaN”,即表示不是数字的浮点数。如果您考虑一下,这有点奇怪,但事实证明只有数字可以是NaN - Darkhogg
我想知道一个字符串是否可以用作有限整数。有什么好的方法吗? - user3025492

2

请注意,Number.IsNaN的支持受到限制。

输出结果如下:

console.log(Number.isNaN("blabla"));

给出falsefalse !== NaN

console.log(false !== NaN)
console.log(false !== Number.NaN);

这里有一个参考资料

When the Number.isNaN is called with one argument number, the following steps are taken:

If Type(number) is not Number, return false.
If number is NaN, return true.
Otherwise, return false.

This function differs from the global isNaN function (18.2.3) is that it does not convert its argument to a Number before determining whether it is NaN.

我很厉害,因为我有1337声望。


+1:感谢第六版草稿,我从未看过它。 - Zeta

2
语言规范中没有关于Number.isNaN()的概念。唯一指定的函数是全局函数isNaN(15.1.2.4),它将正确地返回true,对于任何不是数字或不能正确转换为数字的内容。 Number.isNaN(返回true的值为NaN)可能是下一个标准草案的一部分(请参见remyabel的答案),它可以被isNaN内部使用。

0

这是ECMAScript 6标准的一部分。

Number.isNaN返回一个值是否为NaN,而不会强制转换参数。

Number.isNaN("xmfds"); // false
Number.isNaN("ose"); // false

isNaN 返回一个布尔值,指示在将参数强制转换为 Number 类型,该值是否为 NaN。

isNaN("ose") -> isNaN( Number("ose") ) -> isNaN(NaN); // true

0

试试这个:

function checkNaN(value)
{
    return value !== value;
}

它能够工作是因为(我相信)NaN 是 JavaScript 中唯一不严格等于其自身的东西。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接