JS中的isNaN()方法
isNaN存在的意义
由于NaN是唯一一个不等于自身的值,所以它不像其他值,可以用相等操作符来判断是否等于自身。比如undefined == undefined和undefined === undefined都会返回true,而NaN == NaN和NaN === NaN都会返回false,所以isNaN()就诞生了,那么它可以用来干什么呢?下面就来介绍一下它的作用:
判断
原理
isNaN函数接受一个参数,原理是先尝试将参数转换为数值型,调用的是Number()方法,再进行判断。
Number()
说到这里就有必要介绍一下Number()方法了,其实Number()方法的原理也有点复杂,具体分两种情况。
Number()方法也接收一个参数:
一、接收的参数为原始类型
首先原始数据类型有:number、string、boolean、undefined、null。
先对参数调用valueOf()()方法,再用Number()方法进行判断。(注:valueOf():返回指定对象的原始值,Number():将对象中的值转换为数字)
例:
//1. 字符串
Number('123') // 123
Number('123abc') // NaN
Number(' ') // 0
// 2. 布尔值
Number(true) // 1
Number(false) // 0
// 3. undefined
Number(undefined) // NaN
// 4. null
Number(null) // 0
二、接收的参数为对象
先对参数调用valueOf方法,再对参数调用toString()方法,最后用Number()方法进行判断。(注:toString():把对象转换为字符串,并返回结果)
参数为对象时返回的是NaN,除非参数是包含单个数值的数组(数组也是对象)
例:
Number({a}) // NaN
Number([1, 2, 3]) // NaN
Number([1]) // 1
介绍完Number()方法的原理之后,就可以很好地知道isNaN()判断的结果了。
那么isNaN()方法在什么条件下会返回true,又会在什么条件下返回false呢?
返回 true: NaN、对象(除包含单个数值的数组)、undefined、不能用Number()方法转为number类型的字符串
返回false: 数值、null、布尔值、能用Number()方法转为number类型的字符串、包含单个数值的数组
作用
根据isNaN()方法返回的是true还是false可以检测参数是否可以像number类型那样是可运算的,如果是不可运算的,则可赋予这个参数一个默认的值或者是其他合适的内容,就可以得到一个隐式转换参数数值的函数。