在Javascript中使用parseInt函数需要注意的问题
几天前,信用卡网站不得不进入一个新的功能,但这真的很棘手。asp网站,我们都知道信用卡的背面有一个到期日。在对接银行,必须将此信息发送到银行进行数据验证。用户通过语音输入信用卡到期日期后,系统会做出到期日期判断。对于不必要的麻烦,需要判断到期日一定不能在一个月以内。因为输入的日期和月份在三个文本框里,我觉得把它变成时间太麻烦了,我就干脆。
说到这里,我终于谈到了文章的主题。我们知道有效期是这样的:2015-09-20,所以我毫不犹豫的从月份文本框中拿出‘09’,然后在chrome下做了如下转换。我很高兴,得到了它。
下午小姐姐反馈说信用卡的有效期判断有问题,比较意外。如何在自己的机器上尝试没有问题,然后她别无选择,只能去小姐姐的桌子上看一看。对了,她抹了点油,用IE调试器调试。果然,灵异发生了,现在她终于发现了问题。
当时测试妹安装了IE8,然后parseint默认用我的“09”作为八进制,但是发现不是合法的八进制,最后抛出了一个假的0。我们也看到在chrome下,默认会把“09”视为十进制,那么js引擎自然会转换成9,这是我比较满意的结果。所以,IE真的不符合人类的常识。
一:解决方案
1在刚才的讨论中,也发现parseInt在不同的浏览器下有不同的默认行为,没有办法处理。我看不出parseint在底层是如何处理的。只能看javascript api文档的黑盒,然后找到一个让我惊讶的基数参数。
知道了这个基数,问题就很容易解决了。现在我只需要指定基数=10,如图所示:
但是后来发现在IE9下,parseint缺基数时默认使用十进制,最后微软做了正确的修改,以符合大众口味。
除了parseint,其实还有一个Number函数可以帮你解决这个问题,IE7和IE8都没有问题。因为在js中,如果你去new看这个Number,可以生成一个Number对象,和C#不同,所以我可以从下面两个方面来看。
这个Number的优点是只能处理十进制值,还有其他特殊玩法。与仅接受字符串参数的parseint不同,number可以接受任何类型,例如:
因为看不到Number的底层源代码,只能通过道听途说来记住这些问题,这也是JS和其他托管语言的区别。
版权声明:在Javascript中使用parseInt函数需要注意的问题是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。