JavaScript 中, NaN 是一个特殊的数字值 (typeof NaN 的结果为 number), 是 not a number 的缩写, 表示不是一个合法的数字.
1. NaN 的产生:
一个不能被解析的数字
- Number('abc') // NaN
- Number(undefined) // NaN
失败的操作
- Math.log(-1) // NaN
- Math.sqrt(-1) // NaN
- Math.acos(2) // NaN
一个运算符为 NaN
- NaN + 1 // NaN
- 10 / NaN // NaN
2. 注意点
NaN 是唯一一个和自身不相等的值:
NaN === NaN // false
3. 如何辨别 NaN
我们可以使用全局函数 isNaN() 来判断一个数值是不是一个非数字 (并不是用来判断是不是 NaN 这个值):
- isNaN(NaN) // true
- isNaN(10) // false
为什么说 isNaN() 不是用来判断是不是 NaN 这个值的呢? 因为 isNaN 对非数字不起作用, 它首先做的就是把这些值转换成数字, 转换的结果可能为 NaN, 然后函数会错误地返回 true:
isNaN('abc') // true
所以我们想确定这个一个值是为 NaN, 可以使用以下两种方法:
方法一: 将 isNaN() 和 typeof 结合来判断
- function isValueNaN(value) {
- return typeof value === 'number' && isNaN(value)
- }
方法二: 值是否与本身不相等 (NaN 是唯一有这样特征的值)
- function isValueNaN(value) {
- return value !== value
- }
参考:《深入理解 JavaScript》
来源: https://blog.csdn.net/cc18868876837/article/details/101224974