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与其他托管语言不一样的地方。
JavaScript parseInt() toString()函数 原文:JavaScript parseInt() toString()函数 parseInt(string, radix) string:必需。要被解析的字符串 radix:可选。表示要解析的数字的基数。
JavaScript parseInt() 函数 原文:JavaScript parseInt() 函数 parseInt(string, radix) string:必需。要被解析的字符串 radix:可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。
Javascript之旅——第四站:parseInt中要注意的坑 原文:Javascript之旅——第四站:parseInt中要注意的坑 前些天信用卡站点要接入一个新功能,不过还真比较坑爹,asp站点,大家都知道信用卡的背面是有一个有效期的,在对接银行中这个信息 一定是要传给银行做数据校验,用户在语音输入信用卡有效期后,系统会做一个有效期判断,为了不必要的麻烦,就是判断过期时间一定不能在 一个月内,由于输入的年月日在三个文本框中,再加上我嫌转成时间麻烦,就索性直接拿年,月,日的文本内容直接强转成int类型来判断,此为
javascript字符串数字转化函数parseInt的奇怪现象 今天突然产品找我说,一个网页无法提交信息,错误是“网页弹出提示信息:表单A的值必须小于表单B的值,但是的确是小于啊,怎么还是提示?” 我看了看,javascript代码如下: if(parseInt(A.
相关文章
- Javascript之旅——第九站:吐槽function
- Javascript之旅——第七站:说说js的调试
- Javascript之旅——第六站:看看writable特性
- Javascript之旅——第二站:对象和数组
- Javascript Prototypes之旅(A Plain English Guide to JavaScript Prototypes译文)
- 单线程的JavaScript
- [Javascript] Broadcaster + Operator + Listener pattern -- 6. Create a Buffer to Pair Values Together with Zip
- [Javascript] Wait for the Fastest JavaScript Promise to Be Fulfilled with Promise.any()
- [Javascript] Avoiding Mutations in JavaScript with Immutable Data Structures
- [Algorithms] Refactor a Linear Search into a Binary Search with JavaScript
- [Javascript] Convert a Callback-Based JavaScript Function to a Promise-Based One
- [Javascript] Use JavaScript's for-in Loop on Objects with Prototypes
- [Javascript Crocks] Safely Access Object Properties with `prop`
- [Javascript Crocks] Understand the Maybe Data Type
- [Javascript] Compose multiple functions for new behavior in JavaScript
- 新手学JavaScript(三)----超酷消息警告框插件(SweetAlert)
- JavaScript对象也玩序列化和反序列化[转]
- [Javascript] Filter out Duplicates from Flat JavaScript Array with array.filter / reduce / Set
- [Javascript] Broadcaster + Operator + Listener pattern -- 3 Stop with condition
- [Javascript] Link to Other Objects through the JavaScript Prototype Chain
- [Javascript] Decorators in JavaScript
- javascript函数
- 关于Fiori应用sandbox JavaScript的两个疑问
- Java,JavaScript和ABAP通过代码取得当前代码的调用栈Callstack
- atitit.javascript js 上传文件的本地预览
- Stimulsoft Dashboards.JS JavaScript 2203.1.0仪表板
- 从零开始学_JavaScript_系列(十一)——dojo(5)(GRID表格进阶:更新值,name,重置表结构/缓存,重绘表格)
- javascript怎么判断字符串中全为f?
- web前端框架Javascript开发基础之JavaScript作用域