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.

 

 

這樣就沒有問題了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM