Javascript中使用parseInt函數(shù)需要注意的問題
前些天信用卡站點(diǎn)要接入一個(gè)新功能,不過還真比較坑爹,asp站點(diǎn),大家都知道信用卡的背面是有一個(gè)有效期的,在對(duì)接銀行中這個(gè)信息一定是要傳給銀行做數(shù)據(jù)校驗(yàn),用戶在語音輸入信用卡有效期后,系統(tǒng)會(huì)做一個(gè)有效期判斷,為了不必要的麻煩,就是判斷過期時(shí)間一定不能在一個(gè)月內(nèi),由于輸入的年月日在三個(gè)文本框中,再加上我嫌轉(zhuǎn)成時(shí)間麻煩,就索性直接拿年,月,日的文本內(nèi)容直接強(qiáng)轉(zhuǎn)成int類型來判斷,此為背景。
說了這么多,終于說到文章主題了,我們知道有效期有這樣的:2015-09-20,我就毫不猶豫的從月文本框中拿出了"09",然后屁顛屁顛的在chrome下做了如下轉(zhuǎn)換,很開心,搞定。
下午測(cè)試小妹妹反饋過來說,信用卡有效期判斷有問題,比較詫異,在自己機(jī)器上怎么試都沒有問題,然后沒轍,只能親自去小妹妹桌上看看,順便搽點(diǎn)油,開著IE調(diào)試器調(diào)試了下,果然,靈異事件發(fā)生了,現(xiàn)在終于找到問題所在了。
當(dāng)時(shí)測(cè)試小妹妹裝的是IE8,然后在IE8下面parseint默認(rèn)會(huì)把我的“09”當(dāng)成八進(jìn)制,但是又發(fā)現(xiàn)不是合法的八進(jìn)制,最后就拋出了0這個(gè)false,我們也看到在chrome下,“09”會(huì)默認(rèn)當(dāng)做十進(jìn)制來看的,所以js引擎會(huì)理所當(dāng)然的轉(zhuǎn)化成了9這個(gè)我滿意的結(jié)果,所以嘛,IE真的是不按照人的常理出牌,現(xiàn)在我們?cè)撊绻鉀Q呢?
一:解決方案
<1> 剛才討論中也發(fā)現(xiàn)了,parseInt在不同的瀏覽器下有不同的默認(rèn)行為處理,沒轍,又看不到parseint底層是怎么處理的,只能去找javascript的api文檔這個(gè)黑盒去看一看,然后就發(fā)現(xiàn)一個(gè)讓我很驚喜的radix參數(shù)。
知道了這個(gè)radix,問題就可以迎刃而解了,現(xiàn)在我只需指定下radix=10即可,如圖:
不過后來發(fā)現(xiàn)在IE9下面,parseint在缺失radix的時(shí)候底層也是默認(rèn)采用十進(jìn)制的,終于微軟為了符合大眾口味做了正確的修改。
<2>除了parseint這個(gè)函數(shù),其實(shí)還有一個(gè)Number函數(shù)也可以幫你解決這個(gè)問題,并且在IE7,8上面都是沒有問題的,由于在js中,如果你去new 一下這個(gè)Number的話,那就可以生成Number對(duì)象了,這一點(diǎn)和C#有一些區(qū)別,所以下面我可以用兩種方式看一下。
這個(gè)Number的好處在于只會(huì)處理十進(jìn)制數(shù)值,而且還有其他特殊的玩法,不像parseint只接受string的參數(shù),number可以接受任何類型,比如:
由于看不到Number底層的源碼,所以針對(duì)這些問題,我們也只能道聽途說來記住了,這也是JS與其他托管語言不一樣的地方。
相關(guān)文章
200行HTML+JavaScript實(shí)現(xiàn)年會(huì)抽獎(jiǎng)程序
這篇文章主要為大家詳細(xì)介紹了HTML+JavaScript實(shí)現(xiàn)年會(huì)抽獎(jiǎng)程序的200行代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01javascript里絕對(duì)用的上的字符分割函數(shù)總結(jié)
本節(jié)主要介紹了javascript里比較實(shí)用的字符分割函數(shù)的使用,需要的朋友可以參考下2014-07-07總結(jié)分享10個(gè)JavaScript代碼優(yōu)化小tips
這篇文章主要介紹了總結(jié)分享10個(gè)JavaScript代碼優(yōu)化小tips,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-07-07JSON與XML的區(qū)別對(duì)比及案例應(yīng)用
這篇文章主要介紹了JSON與XML的區(qū)別對(duì)比及案例應(yīng)用的講解。本文涉及到XML和JSON優(yōu)缺點(diǎn)講解及對(duì)比,非常不錯(cuò),具有一定的參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-11-11學(xué)習(xí)JavaScript編程語言的8張思維導(dǎo)圖分享
這篇文章主要介紹了學(xué)習(xí)JavaScript編程語言的8張思維導(dǎo)圖分享,本文給出了javascript變量、javascript運(yùn)算符、javascript數(shù)組、javascript流程語句、javascript字符串函數(shù)、javascript函數(shù)基礎(chǔ)、javascript基礎(chǔ)DOM操作、javascript正則表達(dá)式的思維導(dǎo)圖,需要的可以參考下2015-03-03解決layui的form里的元素進(jìn)行動(dòng)態(tài)生成,驗(yàn)證失效的問題
今天小編就為大家分享一篇解決layui的form里的元素進(jìn)行動(dòng)態(tài)生成,驗(yàn)證失效的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-09-09一篇文章帶你吃透JavaScript中的DOM知識(shí)及用法
DOM作用:用來修改網(wǎng)頁內(nèi)容,結(jié)構(gòu)和樣式,下面這篇文章主要給大家介紹了關(guān)于如何通過一篇文章帶你吃透JavaScript中的DOM知識(shí)及用法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11