isNaN('')返回false,但是parseInt('')返回NaN
碰到一个很诡异的问题,isNaN('')返回false,但是parseInt('')返回NaN,说明空字符串在isNaN()方法中会被强制转换为数值0,isNaN()会首先尝试将这个参数转换为数值,然后才会对转换后的结果是否是NaN进行判断。因此,对于能被强制转换为有效的非NaN数值来说返回false值。但是isNaN()方法中很明显并不是用parseInt()强制转换,而是直接判断,空字符串直接用parseInt('')方法转换的返回值实际上NaN。
isNaN()常见的集中返回值:
// number
isNaN(NaN); // true
isNaN(undefined); // true
isNaN({}); // true
isNaN(true); // false
isNaN(null); // false
isNaN(37); // false
// strings
isNaN("37"); // false: 可以被转换成数值37
isNaN("37.37"); // false: 可以被转换成数值37.37
isNaN(""); // false: 空字符串被转换成0
isNaN(" "); // false: 包含空格的字符串被转换成0
// dates
isNaN(new Date()); // false
isNaN(new Date().toString()); // true
isNaN("foobar") // true: "foobar"不能转换成数值