是否可以在不使用isNaN的情况下检测NaN?

时间:2013-01-02 19:07:32

标签: javascript nan

我可以用JavaScript编写一个isNan()函数吗? JavaScript可以检查变量是NaN还是没有原生isNaN函数吗?

这是一个面试问题。

3 个答案:

答案 0 :(得分:12)

如果它是一个数字,并且不等于它自己,那就是NaN。

注意:正如@pst指出的那样,数字约束是不必要的。 NaN似乎是JS!=本身唯一的值。

答案 1 :(得分:1)

此问题的完整解决方案:

var is_NaN = function(n) {

  return (n !== n);  
}

is_NaN(1/'a'); // true
isNaN(1/'a'); // true

因为在JavaScript中NaN不等于它自己。表达式NaN === NaN始终返回false

第二种解决方案:

您可以使用内置isFinite功能。 isFinite检查输入是否为 Infinity NaN的数字。

isFinite(NaN) // false
isFinite(Infinity) // false
isFinite(1) // true
isFinite(true) // true, because argument true is equal to 1
isFinite('a') // false
isFinite(1/'a') // false

答案 2 :(得分:0)

ECMA 6

Number.isNaN(42) === false
Number.isNaN(NaN) === true

http://es6-features.org/#NumberTypeChecking