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

  前些天信用卡站点要接入一个新功能,不过还真比较坑爹,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与其他托管语言不一样的地方。

本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
优秀响应式jQuery焦点图插件bxSlider,优秀响应式布局设计jQuery插件,自适 应任何设备,切换内容可以是视频、图片、HTML、支持触摸设备,自定义函数 callback,支持众多的参数自定义配置,浏览器支持Firefox, Chrome, Safari, iOS, Android, IE7+。 使用方法: 1. 加载jQuery和插件 !-- jQuery library (served from Google) -- script src="jquery/1.8.2/jquery.min.
方法说明: 为指定事件注册一个 单次 监听器,所以监听器至多只会触发一次,触发后立即解除该监听器。 语法: 复制代码 代码如下: emitter.once(event, listener) 接收参数: event (string) 事件类型 listener (function) 触发事件时的回调函数 例子: 复制代码 代码如下: server.once('connection', function (stream) { console.log('Ah, we have our first user!')
本文实例分析了jquery中animate的stop()方法作用。分享给大家供大家参考。具体分析如下: 这里以一个视频中的代码段告诉你stop()的作用: 代码如下: style type="text/css" ul li{ width:50px; height:30px; background:#333; margin-bottom:10px; color:#fff;} /style ul id="flyul" liwod a /li liwod a /li liwod a /li liwod a /l
目前,如果使用javascript来写复制到剪贴板的代码,一般都是浏览器不兼容的。所以采用flash的方式,模拟一个层,再来复制,就可以做到全部浏览器都适用哦~ 需要下载一个swf文件,和一个js文件。把这两个文件,和htm放到一起。 图示: 必须放在服务器端使用哦。 图示: JS代码: 复制代码 代码如下: ZeroClipboard.js // Simple Set Clipboard System // Author: Joseph Huckaby var ZeroClipboard = { vers

jQuery知识点整理 - 2015-07-02 14:07:05

slideUp();向上滑动//改变元素的高度的属性 直到高度为0从而将元素隐藏 slideDown(); slideToggle(); fadeOut();淡出//从不透明变透明 fadeIn() 复制代码 代码如下: function(){ $("span.Italian").toggle(); $("span.Italian").toggle();} 在一个function函数中加入两个toggle函数实现语言的切换 可以给一个元素同时应用多个这种选择器 将script标记放在最下面,只在/body
js 验证上传图片 复制代码 代码如下: var ImgObj=new Image();//建立一个图像对象 varAllImgExt=".jpg|.jpeg|.gif|.bmp|.png|"//全部图片格式类型 varFileObj,ImgFileSize,ImgWidth,ImgHeight,FileExt,ErrMsg,FileMsg,IsImg//全局变量图片相关属性 //以下为限制变量 var AllowExt=""; //允许上传的文件类型为无限制每个扩展名后边要加一个"|" 小写字母表示 v
复制代码 代码如下: // 参数 obj: 要禁止选中文本的元素的jquery对象 // 参数 enabled: true, 可选中; false, 不可选中 function setSelectable(obj, enabled) { if(enabled) { obj.removeAttr("unselectable").removeAttr("onselectstart").css("-moz-user-select", "").css("-webkit-user-select", ""); } e
回到顶部:哭泣的小丑 小丑 Q群: 150508281 top 1 top 2 top 3 top 4 top 5 top 6 by 脚本之家 @哭泣的小丑 [Ctrl+A 全选 注: 如需引入外部Js需刷新才能执行 ]
本文实例讲述了javascript组合使用构造函数模式和原型模式的方法。分享给大家供大家参考。具体如下: function testPrototype2(){ function Person3(name, age, job){ this.name=name; this.age=age; this.job=job; this.friends =["shelb", "court"]; } Person3.prototype = { constructor:Person3, sayName:function()
今天我们来看看怎样使用Angular的ngShow 和ngHide 指令来完成它们听起来应该完成的,显示和隐藏! 它们应该做的事 ngShow 和ngHide 允许我们显示或隐藏不同的元素。这有助于创建Angular应用时因为我们的单页程序会有许多的移动部件随着应用状态的改变而来来去去。 这些指令的最伟大的部分就是我们不必使用CSS或者JS来操作显示还是隐藏。这些都是由老练的Angular来完成。 用法 想使用ngShow 或ngHide, 只需将指令添加到你想要显示或者隐藏的元素上即可。 !-- FOR