JS isNaN 问题

JavaScript016

JS isNaN 问题,第1张

在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。

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

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

比如

var x

console.log(isNaN(x))

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

1、isNaN()

使用js自带全局函数isNaN(), isNaN()返回一个Boolean值,如下 :

var c="hello" //字符串

isNaN(c) //返回一个false

var c=10 //数字

inNaN(c)//返回一个true

如果以上c为一个空串或是一个空格,isNaN将把c当作数字0来处理,所以检查不严谨。

2、正则表达式

function checkNum(input){

var reg=/^[0-9]+.?[0-9]*$/ //判断字符串是否为数字 ,判断正整数用/^[1-9]+[0-9]*]*$/

var num=document.getElementById(input).value

if(!reg.test(num)){

        alert("请输入数字")

    document.getElementById(input).value=""

    return false

    }

}

3、利用typeof的返回值

验证方法:如果返回的值为Number,则为数字;如果返回值为String或其它,则不是数字。如下所示:

var a=123

var b='123abc'

typeof(a) //Number

typeof(b) //String