Loading

JS中的NaN

JS 中的 NaN !== NaN

在控制台上执行下方代码,不出意外的,结果打印了 NaN "!==" NaN

const param = 'abc'
if (parseInt(param) === NaN) {
  console.log(parseInt(param), '===', NaN)
} else {
  console.log(parseInt(param), '!==', NaN)
}

分析

NaN 是怎么出现的

  1. 数学运算符

在一般数学运算 + - * / 运算符执行过程中,js 会对参与计算的变量进行类型转换,将其转换为 Number 类型,如果转换失败,便会将其赋值为 NaN

  const a = 111 + 'a'
  a // NaN
  1. 强制类型转换

JS 内置的数学方法,都会造成类型转换,比如 parseInt,parseFloat,Number 等,当然 parseInt,parseFloatNumber 的区别在于前者只会将字符串开头的整数或浮点数分解出来,转换为整数或浮点数,后者会转换全部内容

Number('111aaa')
parseInt('aaa111')
  1. 变量声明赋值结果

这个没什么说的,初始化变量就是这

const aaa = NaN

总结

从上面看,得出 NaN 的情况,除声明赋值外,其实是变量类型转换失败的结果。而失败的结果恰恰就是 我不知道这个结果是啥,反正不是数字 Not A Number,所以虽然 Js 数字运算将 NaN 赋值给了一个变量或者当成一个结果抛出,但表达的意思其实是描述性的,用于描述 aaa 并不是一个数字 Not A Number,那么不等式就有了合理的解释了

const aaa = NaN // 描述性的赋值:'aaa' 不是一个数字
const bbb = NaN // 描述性的赋值:'bbb' 也不是一个数字
// 你没法确定一个非数字是否等于另一个非数字
aaa === bbb // 所以结果就是false了
posted @ 2020-08-23 10:01  Frank-Link  阅读(1182)  评论(0编辑  收藏  举报