Node.js中的Number.isNaN('asd')=== false!是什么赋予了?

时间:2013-11-24 10:45:50

标签: javascript node.js nan

试一试:在Node.js或Firefox中,打开一个REPL,然后输入:

Number.isNaN('asdf');

这怎么可能不是NaN?什么是NaN,如果不是这样的话?

5 个答案:

答案 0 :(得分:3)

你有误解。 NaN表示非数字这一事实并不意味着任何非数字的内容都是NaN

NaN是浮点算术的特殊值,表示操作的未定义结果。例如,0 / 0通常会产生NaN

更多信息herehere

答案 1 :(得分:2)

language specification中没有Number.isNaN()的概念。唯一指定的函数是全局isNaN(15.1.2.4),它将在任何非数字或无法正确转换为数字的任何内容上正确返回true

Number.isNaN(在NaN上返回true)是可能是下一个标准草案的实现细节的一部分(参见remyabel' answer),可以在内部使用isNaN

答案 2 :(得分:2)

只需注意,似乎是Number.IsNaN has limited support

此输出:

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

提供falsefalse !== NaN

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

这是reference

  

当使用一个参数号调用Number.isNaN时,   采取以下步骤:

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

此函数与全局isNaN函数(18.2.3)的不同之处在于   在确定之前,它不会将其参数转换为数字   是否是NaN。

因为我有1337的声誉,我才知道。

答案 3 :(得分:0)

试试这个:

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

它的工作原理是因为(我相信)NaN是JS中唯一不能完全等同于它的东西。

答案 4 :(得分: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