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"不能转换成数值