JS中 isNaN() 方法解析

1. isNaN() 存在的意义

由于 NaN 是唯一一个不等于自身的值,不像其他的值,可以用相等操作符来判断是否等于自身,NaN == NaNNaN === NaN都会返回false,所以isNaN()就诞生了,那它到底起着怎样的作用呢,且看下文。

2. isNaN() 判断的原理

isNaN函数接受一个参数,原理是先尝试将参数转换为数值型,调用的是Number()方法,再进行判断。

说到这里就有必要介绍一下Number()方法了,其实Number()方法的原理也有点复杂,具体分两种情况。
Number()方法也接受一个参数:
一、 参数为原始数据类型
原始数据类型有:数值、字符串、布尔值、undefined、null
先对参数调用valueOf方法,再用Number()方法进行判断

    //1. 数值:自然转为数值

    //2. 字符串
    Number('123') // 123
    Number('123abc') // NaN
    Number(' ') // 0

    // 3. 布尔值
    Number(true) // 1
    Number(false) // 0

    // 4. undefined
    Number(undefined) // NaN

    //5. null
    Number(null) // 0

二、参数为对象
先对参数调用valueOf方法,再对参数调用toString()方法,最后用Number()方法进行判断。
参数为对象时返回的是NaN,除非参数是包含单个数值的数组(数组也是对象)

    Number({a:1}) // NaN
    Number([1, 2, 3]) //    NaN
    Number([1]) // 1

介绍完Number()方法的原理之后,就可以很好地知道isNaN()判断的结果了。

3. 什么时候返回 true ,什么时候返回 false

返回 true: NaN、对象(除包含单个数值的数组)、undefined、不能用Number()方法转为数值型的字符串

返回false: 数值、null、布尔值、能用Number()方法转为数值型的字符串、包含单个数值的数组

4. isNaN() 的作用

根据isNaN()方法返回的是true还是false可以检测参数是否可以像number那样是可运算的,如果是不可运算的,则可赋予这个参数一个默认的值或者是其他合适的内容,就可以得到一个隐式转换参数数值的函数。

posted @ 2019-08-26 19:08 见崎啊 阅读(...) 评论(...) 编辑 收藏