Javascript之旅——第四站:parseInt中要注意的坑

转载 2016年05月31日 17:18:39

前些天信用卡站点要接入一个新功能,不过还真比较坑爹,asp站点,大家都知道信用卡的背面是有一个有效期的,在对接银行中这个信息

一定是要传给银行做数据校验,用户在语音输入信用卡有效期后,系统会做一个有效期判断,为了不必要的麻烦,就是判断过期时间一定不能在

一个月内,由于输入的年月日在三个文本框中,再加上我嫌转成时间麻烦,就索性直接拿年,月,日的文本内容直接强转成int类型来判断,此为

背景。

  说了这么多,终于说到文章主题了,我们知道有效期有这样的:2015-09-20,我就毫不犹豫的从月文本框中拿出了"09",然后屁颠屁颠的

在chrome下做了如下转换,很开心,搞定。

 

  下午测试小妹妹反馈过来说,信用卡有效期判断有问题,比较诧异,在自己机器上怎么试都没有问题,然后没辙,只能亲自去小妹妹桌上看

看,顺便搽点油,开着IE调试器调试了下,果然,灵异事件发生了,现在终于找到问题所在了。

 

  当时测试小妹妹装的是IE8,然后在IE8下面parseint默认会把我的“09”当成八进制,但是又发现不是合法的八进制,最后就抛出了0这个false

,我们也看到在chrome下,“09”会默认当做十进制来看的,所以js引擎会理所当然的转化成了9这个我满意的结果,所以嘛,IE真的是不按照人的

常理出牌,现在我们该如果解决呢?

 

一:解决方案

<1> 刚才讨论中也发现了,parseInt在不同的浏览器下有不同的默认行为处理,没辙,又看不到parseint底层是怎么处理的,只能去找javascript

的api文档这个黑盒去看一看,然后就发现一个让我很惊喜的radix参数。

  

    知道了这个radix,问题就可以迎刃而解了,现在我只需指定下radix=10即可,如图:

 

不过后来发现在IE9下面,parseint在缺失radix的时候底层也是默认采用十进制的,终于微软为了符合大众口味做了正确的修改。

 

<2>除了parseint这个函数,其实还有一个Number函数也可以帮你解决这个问题,并且在IE7,8上面都是没有问题的,由于在js中,如果你

去new 一下这个Number的话,那就可以生成Number对象了,这一点和C#有一些区别,所以下面我可以用两种方式看一下。

 

这个Number的好处在于只会处理十进制数值,而且还有其他特殊的玩法,不像parseint只接受string的参数,number可以接受任何类型,比如:

由于看不到Number底层的源码,所以针对这些问题,我们也只能道听途说来记住了,这也是JS与其他托管语言不一样的地方。

Javascript之旅——第四站:parseInt中要注意的坑

前些天信用卡站点要接入一个新功能,不过还真比较坑爹,asp站点,大家都知道信用卡的背面是有一个有效期的,在对接银行中这个信息 一定是要传给银行做数据校验,用户在语音输入信用卡有效期后,系统会做一个有...

Android之旅第四站——自定义apapter的使用…

自定义adapter是最常使用的,也是功能很强大的一种adapter,可以对每一个控件进行操作,也没有simpleadapter的map对象存储那样复杂。。通过每一个对象,每一个JavaBean对象,...

Android之旅第四站——Spinner的使用…

Spinner 是一种下拉列表,这个东西的操作也很简单,但是要注意一点:注意:目前adapter只能是ArrayAdapter。先来看效果图:在这里子布局就调用系统内的布局了,自己定义的布局会很难看。...

Android之旅第四站——适配ArrayAdapter,simpleadapter和自定义adapter的区别…

1.ArrayAdapter只可以简单的显示一行文本adapter=new ArrayAdapter(this, R.layout.item_main_lv, R.id.item_main_lv_na...

Android之旅第四站——Simpleapter的使用…

Simpleadapter的使用要比ArrayAdapter的使用复杂一些,必须是map对象类型,每一个map对象包括每一行的控件,可以改变每一个Item,每一行的内容,图片等。而ArrayAdapt...

Android之旅第四站——GridView的使用…

GridView 是一种网格视图,相比较之前的ListView的列表视图,网格视图显得更加有条理,先来看看它长什么样子。。大家肯定见过很多类似的界面,淘宝,京东等很多都有。它的使用很简单,基本上和Li...

Android之旅第四站——初识ListView…

这一章主要是提到adapterview和adapter。什么是adapterview?猜也猜能猜到,是一种控件View,也是我们经常见到的一些视图,列表,网格,下拉列表等,,而adapter就是适配器...

Android之旅第四站——ArrayAdapter的使用…

之前不用adapter,显得有些繁琐,一会跳这,一会跳那得。。让我们用arrayadapter适配内容,这样会显得更加牛B….做这样一个程序:运用ArrayAdapter将数据填充到ListView中...

Web之旅第四站——CSS(Cascading style Sheet) 层叠样式表

从宏观的角度:What,Why,How,Result对css的所有已内容进行归纳总结。注意点:在布局的时候,两个上下位置关系的DIV之间的距离不能用margin-top 直接加上margin-bord...

浏览器兼容之旅的第四站:IE常见Bug——part2

《浏览器兼容之旅的第三站:IE常见Bug——part1》中介绍了IE浏览器下十种经典的Bug产生的原因,以及如何在写代码中避免这些Bug的产生,或者说Bug发生后,又如何来解决这些Bug。这节我们接着...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Javascript之旅——第四站:parseInt中要注意的坑
举报原因:
原因补充:

(最多只允许输入30个字)