为什么要在isFinite()之后检查!isNaN()?

| 我在Google Closure库中遇到了“ 0”功能。它的作用是检查给定数是否既是有限的又不是
NaN
。 底层代码是:
goog.math.isFiniteNumber = function(num) {
  return isFinite(num) && !isNaN(num);
};
因此,首先使用本机的
isFinite
函数检查数字是否为有限,然后再使用ѭ5does进行附加检查以确保数字不是
NaN
。 但是,如果参数为
NaN
,则
isFinite
已经返回false。那么,“ 5”支票有什么优势?     
已邀请:
如果ѭ3的工作方式与ѭ10的工作方式相同,则没有理由编写isFiniteNumber。可能有一些浏览器将NaN视为有限。     
唯一的区别是:
!isNan(1/0) // --> true
isFinite(1/0) // --> false
isNaN检查参数是否为数字。 Infinities(+/-)也是数字,因此它们通过了isNaN检查,但没有通过isFinite检查。 **请注意,任何可以解析为数字的字符串(\“ 2 \”,\“ 3.14 \”)都将导致isNaN返回false。 希望这可以帮助。 PS:user1170379给出的答案非常接近完美。     
阅读以下内容后,您可能会想出[为什么?]: NaN不会检查传递的值是否是无限的-它会检查输入值val的最终结果是否为\“ Type:Number \”。因为isNaN(string)被接受,所以:isNaN(\“ 3.14 \”)// false(这表示true,将给定令牌成功转换为Number类型的鸭子) 您可能会理解,输入值可能是一个未解决的残酷数字,甚至是简单的数学运算: (x / y);反过来可能会产生一个(+/-无限)数。 这里x = 1,y = 0;意思是(1/0)。然后isNaN(x / y)将首先计算为isNaN(1/0);然后 isNaN(infinity)// false。由于(1/0)= infinity是类型:\“ number \”,即typeof(1/0)// \“ number \” isNaN应该并且将返回false。 您不想将\“ infinity \”放在期望最终结果编号的位置。     
可能是由于我已经实现了
(isfinite(num) && isfinite(-num))
的原因-我从mysql收到错误消息,抱怨我将complain-nan放入数据库中,尽管我已经检查了
isfinite(field)
... 关于此主题的有用文章是http://jacksondunstan.com/articles/983,它提供了优化optimization14     
如果参数不是数字或参数是非数字值(例如字符串或对象),则isNaN()返回true;否则返回false。 例如:
isNaN(0/0) =>true;
         
isNaN(2-1) =>false;
如果参数不是NaN,Infinity或-Infinity以外的数字,则isFinite()返回true;否则,返回false。 例如:
isFinite(\"2000\") =>false;
         isFinite(200/2)=> true;`     

要回复问题请先登录注册