Javascript中使用parseInt函數需要注意的問題_javascript技巧

來源:互聯網
上載者:User

  前些天信用卡網站要接入一個新功能,不過還真比較坑爹,asp網站,大家都知道信用卡的背面是有一個有效期間的,在對接銀行中這個資訊一定是要傳給銀行做資料校正,使用者在語音輸入信用卡有效期間後,系統會做一個有效期間判斷,為了不必要的麻煩,就是判斷到期時間一定不能在一個月內,由於輸入的年月日在三個文字框中,再加上我嫌轉成時間麻煩,就索性直接拿年,月,日的常值內容直接強轉成int類型來判斷,此為背景。

  說了這麼多,終於說到文章主題了,我們知道有效期間有這樣的:2015-09-20,我就毫不猶豫的從月文字框中拿出了"09",然後屁顛屁顛的在chrome下做了如下轉換,很開心,搞定。

 

  下午測試小妹妹反饋過來說,信用卡有效期間判斷有問題,比較詫異,在自己機器上怎麼試都沒有問題,然後沒轍,只能親自去小妹妹桌上看看,順便搽點油,開著IE調試器調試了下,果然,靈異事件發生了,現在終於找到問題所在了。

 

  當時測試小妹妹裝的是IE8,然後在IE8下面parseint預設會把我的“09”當成八進位,但是又發現不是合法的八進位,最後就拋出了0這個false,我們也看到在chrome下,“09”會預設當做十進位來看的,所以js引擎會理所當然的轉化成了9這個我滿意的結果,所以嘛,IE真的是不按照人的常理出牌,現在我們該如果解決呢?

 

一:解決方案

<1> 剛才討論中也發現了,parseInt在不同的瀏覽器下有不同的預設行為處理,沒轍,又看不到parseint底層是怎麼處理的,只能去找javascript的api文檔這個黑盒去看一看,然後就發現一個讓我很驚喜的radix參數。

  知道了這個radix,問題就可以迎刃而解了,現在我只需指定下radix=10即可,如圖:

 

不過後來發現在IE9下面,parseint在缺失radix的時候底層也是預設採用十進位的,終於微軟為了符合福士口味做了正確的修改。

 

<2>除了parseint這個函數,其實還有一個Number函數也可以幫你解決這個問題,並且在IE7,8上面都是沒有問題的,由於在js中,如果你去new 一下這個Number的話,那就可以產生Number對象了,這一點和C#有一些區別,所以下面我可以用兩種方式看一下。

 

這個Number的好處在於只會處理十進位數值,而且還有其他特殊的玩法,不像parseint只接受string的參數,number可以接受任何類型,比如:

由於看不到Number底層的源碼,所以針對這些問題,我們也只能道聽途說來記住了,這也是JS與其他託管語言不一樣的地方。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.