isNaN 与 Number.isNaN 的区别
isNaN 会进行类型转换,Number.isNaN 只判断数字类型的 NaN
问题
isNaN 和 Number.isNaN 函数有什么区别?
解答
NaN 的特殊性
NaN(Not-A-Number)是 JavaScript 中的特殊值,表示不是一个数字。它最特殊的地方是无法通过相等运算符判断:
NaN == NaN // false
NaN === NaN // false
因此需要专门的方法来判断一个值是否为 NaN。
isNaN()
全局函数 isNaN() 会先尝试将参数转换为数值,任何不能转换为数值的值都会返回 true:
isNaN(NaN) // true
isNaN('hello') // true - 字符串无法转换为数字
isNaN(undefined) // true
isNaN({}) // true
isNaN('123') // false - 可以转换为数字 123
Number.isNaN()
Number.isNaN() 会先判断参数是否为数字类型,只有当参数是数字且值为 NaN 时才返回 true,不会进行类型转换:
Number.isNaN(NaN) // true
Number.isNaN('hello') // false - 不是数字类型
Number.isNaN(undefined) // false
Number.isNaN({}) // false
Number.isNaN('123') // false
关键点
isNaN()会将参数转换为数字再判断,非数字值也可能返回trueNumber.isNaN()只对数字类型的 NaN 返回true,不进行类型转换Number.isNaN()是更准确、更严格的 NaN 判断方法- NaN 无法通过
==或===与自身比较来判断
目录