Javascript中使用parseInt函数需要注意的问题


Posted in Javascript onApril 02, 2015

前些天信用卡站点要接入一个新功能,不过还真比较坑爹,asp站点,大家都知道信用卡的背面是有一个有效期的,在对接银行中这个信息一定是要传给银行做数据校验,用户在语音输入信用卡有效期后,系统会做一个有效期判断,为了不必要的麻烦,就是判断过期时间一定不能在一个月内,由于输入的年月日在三个文本框中,再加上我嫌转成时间麻烦,就索性直接拿年,月,日的文本内容直接强转成int类型来判断,此为背景。

Javascript中使用parseInt函数需要注意的问题

说了这么多,终于说到文章主题了,我们知道有效期有这样的:2015-09-20,我就毫不犹豫的从月文本框中拿出了"09",然后屁颠屁颠的在chrome下做了如下转换,很开心,搞定。

Javascript中使用parseInt函数需要注意的问题

 

下午测试小妹妹反馈过来说,信用卡有效期判断有问题,比较诧异,在自己机器上怎么试都没有问题,然后没辙,只能亲自去小妹妹桌上看看,顺便搽点油,开着IE调试器调试了下,果然,灵异事件发生了,现在终于找到问题所在了。

Javascript中使用parseInt函数需要注意的问题

 

当时测试小妹妹装的是IE8,然后在IE8下面parseint默认会把我的“09”当成八进制,但是又发现不是合法的八进制,最后就抛出了0这个false,我们也看到在chrome下,“09”会默认当做十进制来看的,所以js引擎会理所当然的转化成了9这个我满意的结果,所以嘛,IE真的是不按照人的常理出牌,现在我们该如果解决呢?

 

一:解决方案

<1> 刚才讨论中也发现了,parseInt在不同的浏览器下有不同的默认行为处理,没辙,又看不到parseint底层是怎么处理的,只能去找javascript的api文档这个黑盒去看一看,然后就发现一个让我很惊喜的radix参数。Javascript中使用parseInt函数需要注意的问题

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

Javascript中使用parseInt函数需要注意的问题

 

不过后来发现在IE9下面,parseint在缺失radix的时候底层也是默认采用十进制的,终于微软为了符合大众口味做了正确的修改。Javascript中使用parseInt函数需要注意的问题

 

<2>除了parseint这个函数,其实还有一个Number函数也可以帮你解决这个问题,并且在IE7,8上面都是没有问题的,由于在js中,如果你去new 一下这个Number的话,那就可以生成Number对象了,这一点和C#有一些区别,所以下面我可以用两种方式看一下。

Javascript中使用parseInt函数需要注意的问题

 

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

Javascript中使用parseInt函数需要注意的问题

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

Javascript 相关文章推荐
JS获取节点的兄弟,父级,子级元素的方法
Jan 09 Javascript
js实现的复制兼容chrome和IE
Apr 03 Javascript
使用mini-define实现前端代码的模块化管理
Dec 25 Javascript
JavaScript中实现map功能代码分享
Jun 11 Javascript
JS实现设置ff与ie元素绝对位置的方法
Mar 08 Javascript
AngularJS基础 ng-keyup 指令简单示例
Aug 02 Javascript
AngularJS基础 ng-value 指令简单示例
Aug 03 Javascript
JS 实现百度搜索功能
Feb 01 Javascript
Vue使用枚举类型实现HTML下拉框步骤详解
Feb 05 Javascript
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
Apr 19 Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
Jul 21 Javascript
如何理解Vue前后端数据交互与显示
May 10 Vue.js
Yii2使用Bootbox插件实现自定义弹窗
Apr 02 #Javascript
jquery制作多功能轮播图插件
Apr 02 #Javascript
Javascript中3个需要注意的运算符
Apr 02 #Javascript
原生JS实现响应式瀑布流布局
Apr 02 #Javascript
Javascript变量的作用域和作用域链详解
Apr 02 #Javascript
JavaScript中连接操作Oracle数据库实例
Apr 02 #Javascript
JavaScript中操作Mysql数据库实例
Apr 02 #Javascript
You might like
谈PHP生成静态页面分析 模板+缓存+写文件
2009/08/17 PHP
PHP中防止SQL注入实现代码
2011/02/19 PHP
ThinkPHP的MVC开发机制实例解析
2014/08/23 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
PHP小程序支付功能完整版【基于thinkPHP】
2019/03/26 PHP
Laravel框架控制器,视图及模型操作图文详解
2019/12/04 PHP
Aster vs KG BO3 第三场2.19
2021/03/10 DOTA
JQuery 将元素显示在屏幕的中央的代码
2010/02/27 Javascript
JavaScript 放大镜 移动镜片效果代码
2011/05/09 Javascript
javascript验证身份证完全方法具体实现
2013/11/18 Javascript
jQuery照片伸缩效果不影响其他元素的布局
2014/05/09 Javascript
jQuery中parents()方法用法实例
2015/01/07 Javascript
jQuery获取radio选中项的值实例
2016/06/18 Javascript
JS触发服务器控件的单击事件(详解)
2016/08/06 Javascript
基于bootstrap的选择框插件icheck
2016/12/23 Javascript
js/jquery控制页面动态加载数据 滑动滚动条自动加载事件的方法
2017/02/08 Javascript
基于JavaScript实现的顺序查找算法示例
2017/04/14 Javascript
vue实现简单表格组件实例详解
2017/04/16 Javascript
详解vue中引入stylus及报错解决方法
2017/09/22 Javascript
js中split()方法得到的数组长度问题
2018/07/19 Javascript
Node.js系列之连接DB的方法(3)
2019/08/30 Javascript
微信小游戏中three.js离屏画布的示例代码
2020/10/12 Javascript
[01:40]2014DOTA2国际邀请赛 三冰SOLO赛后采访恶搞
2014/07/09 DOTA
[42:23]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第二场 12.10
2020/12/13 DOTA
Python中关键字is与==的区别简述
2014/07/31 Python
python 如何快速找出两个电子表中数据的差异
2017/05/26 Python
Django 实现xadmin后台菜单改为中文
2019/11/15 Python
python实现数据结构中双向循环链表操作的示例
2020/10/09 Python
python正则表达式re.match()匹配多个字符方法的实现
2021/01/27 Python
Servlet面试题库
2015/07/18 面试题
制冷与电控专业应届生求职信
2013/11/11 职场文书
会计专业导师推荐信
2014/03/08 职场文书
支部鉴定材料
2014/06/02 职场文书
家具公司总经理岗位职责
2014/07/08 职场文书
2015年秋季小班开学寄语
2015/05/27 职场文书
Redis唯一ID生成器的实现
2022/07/07 Redis