建议3:正确处理Javascript特殊值---(1)正确使用NaN和Infinity

  NaN时IEEE 754中定义的一个特殊的数量值.他不表示一个数字,尽管下面的表达式返回的是true

typeof(NaN) === 'number'  //true

  该值可能会在试图将非数字形式的字符串转换为数字时产生,例如

+ '0'       //0
+ 'oops'    //NaN

  如果NaN是数字运算中的一个运算数,那么它与其他运算数的运算结果就会使NaN.如果有一个表达式产生出NaN的结果,那么至少其中一个运算符是NaN或者在某个地方产生了NaN.

  可以对NaN进行检测,但是typeof不能辨别数字和NaN的区别,并且NaN不等同于它自己

NaN === NaN   //false
NaN !== NaN   //true

  所以,为了方便检测NaN值,JavaScript提供isNaN静态函数,以辨别数字与NaN区别

isNaN(NaN)     //true
isNaN(0)       //false
isNaN('oops')  //true
isNaN('0')     //false

   判断一个值是否可用做数字的最佳方法是使用isFinite函数,因为它会筛除掉NaN和Infinity.Infinity表示无穷大.当数值超过浮点数所能够表示的范围时,就要用Infinity表示.反之,负无穷大-Infinity.

  使用isFinite函数能够检测NaN,正负无穷大.如果是有限数值,或者可以转换为有限数值,那么将返回true,否则返回false.

  不幸的是,isFinite会试图把它的运算数转换为一个数字.因此,如果值不是一个数字,使用isFinite函数就不是一个有效的检测方法,这是可以自定义isNumber函数.

var isNumber = function isNumber(value){
    return typeof value === 'number' && isFinite(value);
}
posted @ 2019-12-20 15:29  KIU的博客  阅读(724)  评论(0编辑  收藏  举报