2012-04-10 20 views
5

如何在不使用isNaN函数的情况下检查输入值是否为NaN如何判断值是不是NaN而不使用isNaN,它有误报?

+1

为什么你会需要这个?此外,这是一个非常“给我codez”的需求,所以...不,我们不会帮助。 – 2012-04-10 18:58:12

+8

我有一个螺丝,我需要拧入,但我不想使用螺丝刀。不,我不会告诉你为什么我不会使用螺丝刀。让我知道,谢谢。 – asawyer 2012-04-10 18:58:12

+0

这是功课吗?我想不出任何其他的原因,你想要发挥'isNaN'功能。 – JaredPar 2012-04-10 18:59:26

回答

7

如果你可以使用ECMAScript 6,你有Object.is

return Object.is(obj, NaN); 

否则,这里是一个选项,从underscore.js源代码:

// Is the given value `NaN`? 
_.isNaN = function(obj) { 
    // `NaN` is the only value for which `===` is not reflexive. 
    return obj !== obj; 
}; 

也是他们注意对于功能:

注意:这与原生isNaN函数不同,如果变量未定义,它也会返回true。

+0

'isNaN('0')=== false',而__isNaN('0')'为true。 – 2012-04-10 19:01:25

+0

'isNaN('as')'为'true',但'_.isNaN('as')'为'false'。 – 2012-04-10 19:02:36

+0

@RobW在哪?这是每个规格的错误。根据规格,唯一不严格等于自身的是NaN。 – gsnedders 2012-04-10 19:04:17

1

将输入到一个号码,并检查是否减法不为零:

var x = 'value'; 
var is_NaN = +x - x !== 0; // The + is actually not needed, but added to show 
          // that a number conversion is made. 
+0

'x = Infinity'呢? – Kobi 2012-04-10 19:13:29

+0

@Kobi:'Infinity-Infinity'是'NaN' :-P – 2012-04-10 19:14:42

+1

@Kobi'isNaN(Infinity)'返回'false',我的方法返回true。 Infinity不是[真实数字](https://secure.wikimedia.org/wikipedia/en/wiki/Real_number),所以我相信我的实施会更好(随时与我争论)。 – 2012-04-10 19:15:54

相关问题