js中parseInt()会导致的一些问题
遇到这样一个问题,就是去获取一个日期控件的值与另一个来进行对比,获取一个区间值如图所示。
但是遇到了以下问题,我把获取的值在控制台打印了出来:
第一个值获取之后实例化成了一个日期对象,没有什么异常的。但是第二个值的结果就不正确了:
使用的函数和方法都是一样的,为什么会有这样的现象呢,并且在Chrome 和 Firefox 下结果页是正确的,只有在IE下才会这样。
然后我将parseInt转化之后的值都打印了出来查看:
第一个值没有问题,第二个值因为js的月份是从0开始计算的,所以在实例化的时候去减了一个1,也没有什么问题。但是第三个值却为0。越来问题出现在这。
于是去查了下parseInt的用法,原来当parseInt("09")的时候,js会默认为是八进制,所以导致转换的时候出错。
对parseInt的解释是这样的:
If the input string begins with "0", radix is eight (octal) or 10 (decimal). Exactly which radix is chosen is implementation-dependent. ECMAScript 5 specifies that 10 (decimal) is used, but not all browsers support this yet. For this reason always specify a radix when using parseInt.
大概意思是,当字符串是以0为开始的时候,他的基数可能是8进制或者10进制,这取决于浏览器的实现,ECMAScript 5使用的是10进制,但是不是所有的浏览器都会支持的,这就是为什么当我们使用parseInt的时候会有不同的结果。
因此我们在使用的时候,只要的给它传一个另外一个参数,就是转换的基数类型即可:parseInt(number,type)
parseInt("10")==>parseInt("010",10)===>10
parseInt("010")==>parseInt("010",8)==>8
parseInt("0x10")==>parseInt("010",16)==>16.
这样就没有问题了。