JavaScript中,一个堪称毒瘤的槽糕特性NaN,必需要了解这些

点击上方蓝字关注“小郑搞码事”,每天都能学到知识,搞懂一个问题!

JavaScript中,NaN是一个比较槽糕的特性设计,它表示的不是一个数字(一个本来要返回数值的操作数未返回数值的情况—这样就不会抛出错误了),尽管下面这几个结论让人觉得有点惊讶:

一,NaN数据类型是Number

console.log(typeof NaN === 'number')

输出:true

二,将非数字形式的字符串转换为数字时产生

console.log(isNaN('3'))

输出:false (3)

console.log(isNaN('33xiao'))

输出:true(NaN)

如果NaN是数学运算中的一个运算数,那么结果就是NaN。所以,如果你有一个公式链产生出NaN的结果,那肯定要么其中一个输入项是NaN,要么在某个地方产生了NaN。

三,NaN不等同于它自己

如上第二点代码所示,可以使用isNaN内置函数对它进行一个检测,注意,NaN不等同于它自己,如下代码:

NaN === NaN

输出:false

NaN !== NaN

输出:true

四,如何判断一个值是否可用做数字

判断一个值是否可用做数字的最佳方法是使用isFinite函数,因为它会筛除掉NaN和Infinity。但是,isFinite会试图把它的运算数转换为一个数字,所以,如果值事实上不是一个数字,它就不是一个好的测试,因此我们可以像下面这样,封装一个函数来处理。如下代码:

JavaScript中,一个堪称毒瘤的槽糕特性NaN,必需要了解这些

总结:

目前发现isNaN其实也太靠谱,用的少,所以记住第四点。


分享到:


相關文章: