关于isNAN()函数内进行的莫名其妙的隐式转换?!

 isNaN(X) 函数用于检查其参数是否是非数字值。

  如果 x 是特殊的非数字值 NaN(或者能被转换为这样的值 )返回的值就是 true。如果 x 是其他值,则返回 false。

  首先,我们先来了解一下什么是NAN,NAN即note a number,NaN 属性用于引用特殊的非数字值。而isNaN() 函数通常用于检测 parseFloat() 和 parseInt() 的结果,以判断它们表示的是否是合法的数字。当然也可以用 isNaN() 函数来检测算数错误,比如用 0 作除数的情况。

  但是在实际的工作中,使用isNAN()方法会出现一些难以解释的现象,那是因为该方法运行中进行了“隐式转换”,下面列出了一些案例;

 

isNaN(NaN); // true

isNaN(undefined); // true

isNaN({}); // true

isNaN(true);// false

isNaN(null); // false

isNaN(37); // false

// strings

isNaN("37"); // false: "37"、 “37”将转换为一个数字37,所以不是一个NAN;

isNaN("37.37"); // false: "37.37" 将被转换为 37.37 ,所以不是一个 NaN

isNaN("123ABC"); // true: 字符串“123ABC”parseInt("123ABC") 方法后为 123,但是这里是使用Number()方法, Number("123ABC")得到的结果为 NaN

isNaN(""); // false: 空字符串将被转换为数字0,它不是一个NAN,所以为false

isNaN(" "); // false: 一个空格的字符串被转换为数字0,0不是一个NAN,所以为false

// dates

isNaN(new Date()); // false

isNaN(new Date().toString()); // true // 这里使用了toString()方法转为字符串,所以非常肯定的得出它是一个NAN;

isNaN("blabla") // true: 字符串"blabla" 将被转换为一个number. // 解析为数字失败并返回NaN

   从上面的案例可以看出,isNAN()方法括号内的内容如果是字符串数据类型,或者布尔类型,将会使用Number()方法转换数字类型,如果转换后为NAN则返回true,反之则返回false;

posted @ 2017-08-17 15:50  追风者的博客  阅读(1598)  评论(0编辑  收藏  举报