js中的NaN

js中的NaN是用来表示一个本应返回数值的算术表达式未返回数值的情况,这样就不会抛出错误了。例如在js中除0异常会返回NaN,而不是直接抛出错误。

ps:在js高级程序设计原书中提到js中任何数值除以0会返回NaN,实际上任何正数除以0会返回POSITIVE_INFINITY,任何负数除以0会返回NEGATIVE_INFINITY,只有0/0才会返回NaN;

NaN有两个重要的特点,一个是任何涉及NaN的操作都会返回NaN,另一个是NaN不等于任何数,包括它本身。要判断一个数是不是NaN可以使用isNaN()函数,这个函数接收一个任意类型的参数,然后尝试将这个参数转为数值类型,不能被转为数值类型的都会返回NaN。

例如,

isNaN(10)//false

isNaN("10")//false,转为数字10

isNaN("abcd")//true,无法转为数字

在把一个对象作为参数传入isNaN()时,函数会先调用这个对象的valueOf()方法,如果它的返回值可以转为数值则isNaN返回false,否则用这个返回值调用toString()方法,然后判断其返回值是否可以转为数值,是则返回false,否则返回true,即not a number。

var c={};//undefined
typeof c;//"object"
isNaN(c);//true
c.valueOf=function(){return 0;};
isNaN(c);//false
c.valueOf=function(){return "0";};
isNaN(c);//false
c.valueOf=function(){return "blue";};
isNaN(c);//true

猜你喜欢

转载自blog.csdn.net/weixin_40522938/article/details/81740637