js中parseInt()会致使的一些问题

遇到这样一个问题,就是去获取一个日期控件的值与另外一个来进行对比,获取一个区间值如图所示。浏览器

可是遇到了如下问题,我把获取的值在控制台打印了出来:函数

 

 

第一个值获取以后实例化成了一个日期对象,没有什么异常的。可是第二个值的结果就不正确了:this

 

 

使用的函数和方法都是同样的,为何会有这样的现象呢,而且在Chrome 和 Firefox 下结果页是正确的,只有在IE下才会这样。spa

而后我将parseInt转化以后的值都打印了出来查看:对象

 

 

第一个值没有问题,第二个值由于js的月份是从0开始计算的,因此在实例化的时候去减了一个1,也没有什么问题。可是第三个值却为0。越来问题出如今这。ip

因而去查了下parseInt的用法,原来当parseInt("09")的时候,js会默认为是八进制,因此致使转换的时候出错。ci

对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.input

大概意思是,当字符串是以0为开始的时候,他的基数多是8进制或者10进制,这取决于浏览器的实现,ECMAScript 5使用的是10进制,可是不是全部的浏览器都会支持的,这就是为何当咱们使用parseInt的时候会有不一样的结果。string

所以咱们在使用的时候,只要的给它传一个另一个参数,就是转换的基数类型便可:parseInt(number,type)

parseInt("10")==>parseInt("010",10)===>10

parseInt("010")==>parseInt("010",8)==>8

parseInt("0x10")==>parseInt("010",16)==>16.

 

 

这样就没有问题了。

相关文章
相关标签/搜索