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.

 

 

這樣就沒有問題了。

相關文章
相關標籤/搜索