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

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

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

  首先,咱们先来了解一下什么是NAN,NAN即note a number,NaN 属性用于引用特殊的非数字值。而isNaN() 函数一般用于检测 parseFloat() 和 parseInt() 的结果,以判断它们表示的是不是合法的数字。固然也能够用 isNaN() 函数来检测算数错误,好比用 0 做除数的状况。code

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

 

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;字符串

相关文章
相关标签/搜索