8

如果我想测试表达式的结果并且函数将返回 NaN 我将如何检查?
示例:
$('amount').value.toInt()!='NaN'
^ 不起作用,我假设返回的值不是字符串,
$('amount').value.toInt()!=NaN
^ 似乎也不起作用,这似乎很明显

,所以我如何检查返回的值是否不是数字?

4

3 回答 3

36

NaN 值被定义为不等于一切,包括它自己。用函数测试一个值是否为 NaN isNaN(),足够恰当。(ECMAScript 6Number.isNan()为非数字参数添加了一个具有不同语义的函数,但截至 2015 年尚未在所有浏览器中支持)。

NaN 值有两个可用的内置属性:全局NaN属性(即window.NaN在浏览器中)和Number.NaN. 它不是语言关键字。在较旧的浏览器中,该NaN属性可能会被覆盖,可能会产生令人困惑的结果,但在ECMAScript 5 标准中,它被设置为不可写

  • 正如@some 在评论中指出的那样,还有一个全局函数isFinite()可能有用。
于 2009-02-18T04:04:13.417 回答
2

检查 NaN 数值运算结果的最佳方法是采用这种方式,例如:

var x  = 0;
var y  = 0;
var result = x/y;  // we know that result will be NaN value
// to test if result holds a NaN value we should use the following code :

if(result !=result){
console.log('this is an NaN value');
} 

它完成了。

诀窍是 NaN 不能与任何其他值进行比较,即使它本身也是如此(NaN !=NaN 始终为真,因此我们可以利用这一点并将结果与​​自身进行比较)

这是 JavaScript(一种优秀而奇怪的语言)

于 2014-09-23T15:58:05.940 回答
1

等式运算符(== 和 ===)不能用于针对 NaN 测试值。请改用 Number.isNaN() 或 isNaN() 。

NaN === NaN;        // false
Number.NaN === NaN; // false
isNaN(NaN);         // true
isNaN(Number.NaN);  // true
于 2014-05-13T15:51:25.923 回答