今天发现一个以前测试没有出现的问题,是一个javascript校验日期的方法。
当当前日期为2004-12-08时,我要得到日的数字,然后就用到了parseInt(date.getDate())也就是parseInt('08')。
这样调用后返回值是0。最后导致方法校验失败。而其他日期都没有问题,经过查看javaScript帮助文档。有下面的说明:
parseInt 方法
返回由字符串转换得到的整数。
parseInt(numString, [radix])
参数
numString
必选项。要转换为数字的字符串。
radix
可选项。在 2 和 36 之间的表示 numString 所保存数字的进制的值。如果没有提供,则前缀为 '0x' 的字符串被当作十六进制,前缀为 '0' 的字符串被当作八进制。所有其它字符串都被当作是十进制的。
说明
parseInt 方法返回与保存在 numString 中的数字值相等的整数。如果 numString 的前缀不能解释为整数,则返回 NaN(而不是数字)。
最后我把方法修改为parseInt('08', 10)就正确了。parseInt('08')怎么会返回0呢?这个方法是按照八进制进行处理,而8是八进制中永远不会出现的。所以导致转换失败。
在用javascript的parseInt函数时,parseInt("08")或者parseInt("09")返回的居然是0,而parseInt("01")...parseInt("07")都是正确的,一开始很难理解,后来发现出现这个问题的原因是当在前面有"0"时,javascript的debugger会认为这是一个八进制数,而"08"和"09"不是一个合法的八进制数,所以导致了那个问题,但是parseFloat不会存在这个问题。
事实上,parseInt方法有一个可选参数来表示数字的进制,所以这应该不能算是一个bug,只是我们平时没有注意到这种细节问题。那么解决的方法很简单,就是使用parseInt("08",10)或者parseInt("09",10),通知javascript解释器使用十进制来解析就可以了。
还有,当进行数字比较时,如在分页中,输入页数的时候,如果用parseInt()来转换就必须注意这个问题,否则当输入如108,109等页数时就无法准确定位。
当然我们可以不用parseInt()方法来转换,直接比较数字,但是这时候又有一个需要注意的地方:
如果没有进行转换,JavaScript比较是按照字符串的方式来比较的,不管你赋予的是数字,字符还是布尔值,所有当比较数字时,会从第一位开始比较。但是我们还必须比较长度,否则有可能出现45大于234的情况,因为从第一位开始,4大于2,所以会出错误。当时如果比较了长度,因为长度45长度小于234,所以根本就不用按每一位来比较了。
分享到:
相关推荐
JavaScript parseInt()与Number()区别案例详解 学习目标: parseInt()、Number()这两个函数用到最多的地方就是把一个字符串转换成数据类型,那么他们都有哪些区别? 学习内容: parseInt()函数将给定的字符串...
javascript parseInt与Number函数的区别.docx
javascript parseInt 函数分析(转).docx
javascript parseInt() 函数的进制转换注意细节.docx
javaScript parseInt字符转化为数字函数使用小结.docx
javascript的parseInt函数 javascript的parseInt函数,大家都知道是干啥的 但你知道 parseInt(“07”) 返回多少 ? parseInt(“08”) 又返回多少 ? 正确答案是 parseInt(“07”) 返回8 parseInt(“08”) 返回0 你知道...
但是parseInt(“08”, 10)是可以返回8的。 为搞清楚两者的区别, 参考了别人写的parseInt&Number的区别: parseInt Parses a string argument and returns an integer of the specified radix or base. 核心函数 ...
今天测的时候发现问题了,当数据库中月份为09的时候就出问题了,用parseInt转换之后就成0了。好不解。测了好久,没有发现我代码中的问题,到google搜了一下,才知道是这么一回事。 对于parseInt(“01”)到parseInt...
还隐约记得第一次遇到 parseInt这个诡异问题的时候,以为发现了IE的BUG,兴奋不已。
Java 也有 Integer.parseInt() 方法, 但是 JavaScript 的 parseInt 处理方式与 Java 等强整型语言不太一样, 所以经常有人因为对这个方法的使用不当而获得异常返回. 下面是一段 Java 代码, 用于将字符串 020 转为整型...
全局对象的parseInt() 方法</title> [removed] /* parseInt() 函数可解析一个字符串,并返回一个整数。 1、解析字符串,直到不能解析为止 2、进制转化中,解析字符串,直到不能解析为止 */ [removed](parseInt...
parseInt redirect registerCFunction ssjs_generateClientID ssjs_getCGIVariable ssjs_getClientID String taint unescape untaint write 第十四章 LiveConnect 的 Java 包 netscape.javascript.JSObject 方法...
本文实例讲述了javascript中parseInt()函数的定义和用法。分享给大家供大家参考。具体分析如下: 此函数可以解析一个字符串,并返回一个整数。 语法结构: 代码如下:parseInt(string, type) 参数列表: 参数 描述 ...
parseInt(string, radix) 有2个参数,第一个string 是传入的数值,第二个radix是 传入数值的进制,参数radix 可以忽略,默认为 10,各种进制的数转换为 十进制整数,接下来详细介绍,感兴趣的朋友可以了解下哦
今天小编就为大家分享一篇关于Javascript中parseInt的正确使用方式,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
主要介绍了Javascript中使用parseInt函数需要注意的问题,本文讲解了parseInt函数在IE8下可能会返回0值的兼容问题解决方法,需要的朋友可以参考下
这是一个很诡异的事情,今天测试的测出来的。parseInt(1.13*100),实际返回值是112。直接看代码吧 代码如下: <head> [removed] function test(){ var ...//解决方法:将 此处返回改为:parseInt(yuan*1000,10)/1