js中pareseInt()会导致的一些问题

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

但是遇到了以下问题,我把获取的值在控制台打印了出来:

 

 

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

 

 

使用的函数和方法都是一样的,为什么会有这样的现象呢,并且在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.

 

 

这样就没有问题了。

js中pareseInt()会导致的一些问题,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。