文章简介:你所不知的parseInt。 |
相信大家都知道parseInt()是做什么的,这里就不啰嗦了。
以前用parseInt()从来都是parseInt(arg) , 记得在某本javascript书上看过,他还可以有第二个参数,不过从来没有用过,直到今天,
我看到两行代码:
parseInt("08"); //0
parseInt("08", 10); //8
发现,不理解为什么,于是花了一个小时细细的研究了下,原来parseInt是介样滴~
当然这里分为两种情况:
一.parseInt(arg)------只带一个参数,第二个参数省略情况
(1) parseInt('12')------此时省略第二个参数时,默认表示十进制,故'12'表示为十进制的
(2) parseInt('012')------'此处虽省略第二个参数,但是'012'是以'0'开头,所以默认为8进制
(3) parseInt('0x12')------'此处虽省略第二个参数,但是'012'是以'0x'开头,所以默认为16进制
二. parseInt(arg1, arg2)------arg1是要操作的数 , arg2是说明arg1是多少进制的数
(1) parseInt('12', 8)-----表示这里'12'是8进制的
(2) parseInt('78',10)-----表示这里'78'是10进制的
(3) parseInt('012',10)-----这里虽说'012'是以开头滴,默认是8进制的,但是第二个参数又强制告诉计算机'012'是一个10进制的数
好啦,知道以上的知识点后,我们再看下面的例子:
1. alert(parseInt('12', 8)); //10
解:将8进制的'12'转换为十进制 :1*8(8的1次幂) + 2*(8的0次幂) = 10;
2. alert(parseInt('012'));
//10
解:这里'012'是以'0'开头,所以是8进制的,那8进制的'012'转换为十进制,都同上了,但是这里可能有人觉得,同时它也省略了第二个参数,为什么不是十进制的'012',这里其实我也不知道了,程序测试结果为10,我猜想可能是检测到以'0'开头表示8进制比省略第二个参数默认为10进制的先级高吧,欢迎知道的大侠指点
3. alert(parseInt('012', 8));
//
10
解:次中情况应该很好理解,本身'012'默认就是8进制的,后续第二个参数又强调为8进制
4. alert(parseInt('012', 10));
//
12
解:此种情况'012'默认是8进制,但是第二个参数强制告诉计算机第一个数其实是10进制,所以将'012'当10进制处理结果12
5. alert(parseInt('78',8));
//7
解:表示将8进制的'78'计算parseInt,因为8进制中不可能出现8,所以直接截取第一个数字7进行运算,7*8(8的0次幂)=7
6. alert(parseInt('08',8));
//0
解:这里同第5点
7. alert(parseInt('08',10));
//9
解:这里虽是'08'默认是8进制,但是第二个参数强制为了10进制,所以结果9
8. alert(parseInt('08'));
//0
解:这里8进制的'08'只截取'0'操作
9. alert(parseInt('8',8));
//NAN
解:因为8进制中不可能出现8,所以直接NAN
10. alert(parseInt('0x12')); //18
解:这里'0x12'是以'0x'开头,所以默认是16进制,16进制的'12'转换为10进制为18
好啦,这就是我的理解,有什么用词不准确的地方,欢迎拍砖,轻点儿哦