国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

Javascript中使用parseInt函數(shù)需要注意的問題

2019-11-20 12:47:27
字體:
來源:轉載
供稿:網(wǎng)友

  前些天信用卡站點要接入一個新功能,不過還真比較坑爹,asp站點,大家都知道信用卡的背面是有一個有效期的,在對接銀行中這個信息一定是要傳給銀行做數(shù)據(jù)校驗,用戶在語音輸入信用卡有效期后,系統(tǒng)會做一個有效期判斷,為了不必要的麻煩,就是判斷過期時間一定不能在一個月內(nèi),由于輸入的年月日在三個文本框中,再加上我嫌轉成時間麻煩,就索性直接拿年,月,日的文本內(nèi)容直接強轉成int類型來判斷,此為背景。

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

 

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

 

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

 

一:解決方案

<1> 剛才討論中也發(fā)現(xiàn)了,parseInt在不同的瀏覽器下有不同的默認行為處理,沒轍,又看不到parseint底層是怎么處理的,只能去找javascript的api文檔這個黑盒去看一看,然后就發(fā)現(xiàn)一個讓我很驚喜的radix參數(shù)。

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

 

不過后來發(fā)現(xiàn)在IE9下面,parseint在缺失radix的時候底層也是默認采用十進制的,終于微軟為了符合大眾口味做了正確的修改。

 

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

 

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

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 达拉特旗| 合阳县| 绥江县| 兴和县| 甘孜县| 乳源| 定兴县| 山东省| 马鞍山市| 莱州市| 文昌市| 赞皇县| 藁城市| 玛曲县| 漯河市| 呼玛县| 墨竹工卡县| 富裕县| 易门县| 右玉县| 上思县| 翼城县| 揭东县| 弥勒县| 深泽县| 巴里| 乐亭县| 武陟县| 成都市| 双流县| 平原县| 长丰县| 扎赉特旗| 湘潭市| 临朐县| 襄垣县| 板桥市| 浦县| 师宗县| 金乡县| 望江县|