方法一:
判断类型时,最最容易想到的就是typeof,但是如果通过typeof来判断是否为number类型,如果被判断的是NaN返回的结果也会是number,因此我们还需要用isNaN来排除NaN的情况。
function isNumber (obj) {
return typeof obj === 'number' && !isNaN(obj)
}
此外isNaN()相比Number.isNaN()会把被判断的参数强制转换成数字再进行判断,而Number.isNaN()只有在参数是真正的数字类型,且值为NaN时才会返回true。
Number.isNaN(NaN) // true
Number.isNaN(Number.NaN) // true
Number.isNaN(0 / 0) // true
Number.isNaN(null) // false
Number.isNaN(37) // false
Number.isNaN("37") // false
Number.isNaN("NaN") // false 不会隐式转换
window.isNaN('NaN') // true 会隐式转换
方法二:
isNaN(obj) 等价于isFinite()。Infinity在js表示数字的无穷大,判断是否可用做数字的最佳方法则是isFinite(),因为该方法会筛除掉NaN和Infinity两个关键字。