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

本文深入探讨了JavaScript parseInt()函数在处理包含八进制数的字符串时,不同浏览器(如Chrome、Firefox与IE)的处理差异。重点解释了当输入字符串以'0'开头时,函数如何默认解析为八进制或十进制,并通过实例展示了正确的使用方法,以确保跨浏览器的一致性。

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

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

 

 

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

 

 

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

 

 

这样就没有问题了。

转载于:https://www.cnblogs.com/luoxiao-wang/p/3585992.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值