基本数据类型 | 深入理解isNaN()函数和Number.isNaN()函数以及两者的兼容性处理

文章目录

  • 1. 两者的区别
  • 2. 实例
    • 2.1 isNaN()函数
    • 2.2 Number.isNaN()函数
  • 兼容性处理


1. 两者的区别

  isNaN()函数在判断是否为NaN时,需要先进行数据类型转换,只有在无法转换为数字时才会返回true

  Number.isNaN()函数在判断是否为NaN时,只需要判断传入的值是否为NaN不会进行数据类型转换。

关键词数据类型转换


2. 实例

2.1 isNaN()函数

  结果为true的情况


isNaN(NaN) //true
isNaN(undefined) //true
isNaN({}) //true
isNaN("JavaScript") //true
isNaN(new Date().toString) //true 返回的是一串字符串表示的时间,无法转换成数值类型

  结果为false的情况


isNaN(123) //false
isNaN(true)//false
isNaN(false)//false
isNaN("1")//false
isNaN(") //false 转换为0
isNaN(new Date())//false   时间戳


2.2 Number.isNaN()函数

  ES6中的Number.isNaN()函数会在真正意义上去判断变量是否为NaN,不会做数据类型转换。只有在传入的值为NaN时,才会返回true,传入其他任何类型的值时会返回false

  只存在一种结果为true的情况,即传入的值为NaN时。



Number.isNaN(NaN) //true

兼容性处理

  如果在非ES6环境中想用ES6中的isNaN()函数,可参考以下兼容性处理方案。

if(!Number.isNaN){
	Number.isNaN = fucntion(n){
		return n != n;
	}
}

  在所有类型的数据中,如果一个变量和自身作比较,只有在变量值为NaN时才会返回false,其他情况都是返回true。所以n !== n返回true,只有在n为NaN的时候才成立。

你可能感兴趣的:(javascript,isNaN,Numeber.isNaN,兼容性处理)