js中为什么 isNaN 为 true

JavaScript021

js中为什么 isNaN 为 true,第1张

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

比如

var x

console.log(isNaN(x))

这个输出就是true,因为x 没有定义,是undefined,是“非数字值”

在javascript中,没有对象、直接调用的函数,都是全局函数。说是全局,其实只不过是从属于内置对象window的属性或方法而已。也就是说,isNaN()等价于window.isNaN()。其它方法属性也是类似,比如:

// 不属于任何对象的i

var i = 5

function test(){

    alert(i)

}

test()// 5

alert(i) // 5

alert(window.i) // 5

以上几种alert出来的i都是5,说明window.i其实就是声明的那个i。

isNaN是window对象的一个方法,它的作用是判断参数是不是一个NaN。其实也就是看参数能不能转化为数字,如果能,就返回false;不能转化为数字,则返回true。例如:

isNaN('134') // false,字符串134可以转化为数字

isNaN('1a34') // true,字符串1a34不能转化为数字

isNaN('0x34') // false,字符串0x34能转化为数字,十六进制

isNaN(true) // false,布尔型变量能转化为数字,值为1

有一点要注意,在上面已经提到,布尔型值是能够转换成数字的,比如:

alert(true + 1) // 结果为2,因为true会转化为数字1,而false会转化为数字0

但是,如果用下面的代码,就会得到NaN:

alert(parseInt(true)) // NaN

parseInt和isNaN类似,都是window的一个方法,其作用是将参数强制转化为整数,类似的还有window的另一个方法parseFloat,将参数强制转化为浮点数。显然这里parseInt(true)得到了一个NaN,但isNaN(true)得到的却是false。

这两者之间的差别,太具体的我就不清楚了。