1、MDN对NaN的定义
【1】:MDN里面这样描述
The global NaN property is a value representing Not-A-Number.
NaN是一个放在global(浏览器里是window)对象的一个value,是一个代表not a number的value
【2】:NAN的类型
console.log(typeof(NaN)) //number
NaN表示一个非数字的值,但是它的类型却属于number;
2、NAN出现的情况
【1】:手动类型转换
Number("我") ; //NaN
【2】:自动类型转换
2 - "str"; //NaN
这里进行操作符运算,在进行-、*、/、%等运算时,会将非number类型转换为number类型,如果非number转换为number的返回结果是NaN,那么计算结果就返回NaN;
NaN它不是一个值,非要说NaN是一个值得话,那么 NaN 就是除过数字的任意值,但绝不是确切的某一个值!
3、判断是否为NAN的方法:isNAN和Number.isNAN()
举例:
console.log(isNaN(NaN)); // true
console.log(isNaN("a string")) ; //true
console.log(isNaN(undefined)) ; //true
console.log(isNaN({})) ; //true
console.log(Number.isNaN(NaN)) ; //true
console.log(Number.isNaN("a string")) ; //false
console.log(Number.isNaN(undefined)) ; //false
console.log(Number.isNaN({})) ; //false
isNaN()方法局限在“Not a number” 这一字面意思上了,只要不是number就返回true。这个bug存在20年了。
Number.isNaN()是在ES6引入的,只有是NaN的情况下才会返回true;