關(guān)于javascript中的parseInt使用技巧
更新時(shí)間:2009年09月03日 21:17:45 作者:
前面好幾次遇到JavaScript中parseInt函數(shù)把字串轉(zhuǎn)為數(shù)字,前面遇到過(guò)幾次問(wèn)題,然后就換其它方法進(jìn)行比較。
要對(duì)表單中填寫(xiě)的日期格式進(jìn)行客戶(hù)端驗(yàn)證,于是在網(wǎng)上找了段代碼,其中用到parseInt對(duì)年月日做判斷,其中有類(lèi)似這樣的語(yǔ)句:
......
else if(parseInt(month)<1 || parseInt(month) >12)
......
可是對(duì)于當(dāng)前本來(lái)正確的日期,這里怎么也通不過(guò)。后來(lái)一查才明白,parseInt實(shí)際上有兩個(gè)參數(shù),第一個(gè)是要轉(zhuǎn)換的值,第二個(gè)是指定的進(jìn)制。如果不指定第二個(gè)參數(shù),那么它只能正確地轉(zhuǎn)換01到07(即把它們轉(zhuǎn)換成1到7),從08開(kāi)始,它就會(huì)按照“0開(kāi)頭的是八進(jìn)制數(shù)”的規(guī)則轉(zhuǎn)換了!正好現(xiàn)在是9月,我隨手選的日期,正好暴露了這個(gè)問(wèn)題,我要是在上半年做這個(gè),還真是將留下一個(gè)BUG,然后等到下半年客戶(hù)才告訴我日期無(wú)法填寫(xiě)了。
于是,將函數(shù)中所有用到parseInt的地方,都加上了第二個(gè)參數(shù),指明是十進(jìn)制。比如上面那句,改成:
......
else if(parseInt(month,10)<1 || parseInt(month,10) >12)
......
前面好幾次遇到JavaScript中parseInt函數(shù)把字串轉(zhuǎn)為數(shù)字,前面遇到過(guò)幾次問(wèn)題,然后就換其它方法進(jìn)行比較。
當(dāng)我去頁(yè)面取得一個(gè)日歷的東西,然后進(jìn)行轉(zhuǎn)換成數(shù)字進(jìn)行比較 的時(shí)候,月份轉(zhuǎn)換老是出現(xiàn)問(wèn)題,
當(dāng)我用
var num = parseInt(01);
var num = parseInt(01);
...
var num = parseInt(07);
var num = parseInt(08);
var num = parseInt(09);
var num = parseInt(10);
假如當(dāng)我進(jìn)行如上轉(zhuǎn)換的時(shí)候,
parseInt(),傳進(jìn)去的參數(shù)從1到7都沒(méi)有問(wèn)題,可是當(dāng)我用parseInt(08)的時(shí)候就出問(wèn)題,轉(zhuǎn)換出來(lái)的num=0
當(dāng)時(shí)因?yàn)轫?xiàng)目的緊急的原因,也沒(méi)有細(xì)細(xì)的去追究
現(xiàn)在有空了看了一下parseInt這個(gè)javascript方法
javascript 的api的說(shuō)明如下:
parseInt 方法
返回由字符串轉(zhuǎn)換得到的整數(shù)。
parseInt(numString, [radix])
參數(shù)
numString
必選項(xiàng)。要轉(zhuǎn)換為數(shù)字的字符串。
radix
可選項(xiàng)。在 2 和 36 之間的表示 numString 所保存數(shù)字的進(jìn)制的值。如果沒(méi)有提供,則前綴為 '0x' 的字符串被當(dāng)作十六進(jìn)制,前綴為 '0' 的字符串被當(dāng)作八進(jìn)制。所有其它字符串都被當(dāng)作是十進(jìn)制的。
看了如上的api知道了,原來(lái)我轉(zhuǎn)進(jìn)去的參數(shù)為01到08時(shí),參數(shù)以'0'開(kāi)頭,所以轉(zhuǎn)換成了八進(jìn)制。又因?yàn)榘诉M(jìn)制是只能表示0到7所以,當(dāng)我參數(shù)為01到07時(shí)轉(zhuǎn)換正確,當(dāng)為08時(shí)就進(jìn)位了,轉(zhuǎn)換為0.而parseInt(10)又能正解轉(zhuǎn)換為10
所以規(guī)矩的做法是不要省略最后一個(gè)參數(shù),
用parseInt(08,10);就能轉(zhuǎn)換正確了
......
else if(parseInt(month)<1 || parseInt(month) >12)
......
可是對(duì)于當(dāng)前本來(lái)正確的日期,這里怎么也通不過(guò)。后來(lái)一查才明白,parseInt實(shí)際上有兩個(gè)參數(shù),第一個(gè)是要轉(zhuǎn)換的值,第二個(gè)是指定的進(jìn)制。如果不指定第二個(gè)參數(shù),那么它只能正確地轉(zhuǎn)換01到07(即把它們轉(zhuǎn)換成1到7),從08開(kāi)始,它就會(huì)按照“0開(kāi)頭的是八進(jìn)制數(shù)”的規(guī)則轉(zhuǎn)換了!正好現(xiàn)在是9月,我隨手選的日期,正好暴露了這個(gè)問(wèn)題,我要是在上半年做這個(gè),還真是將留下一個(gè)BUG,然后等到下半年客戶(hù)才告訴我日期無(wú)法填寫(xiě)了。
于是,將函數(shù)中所有用到parseInt的地方,都加上了第二個(gè)參數(shù),指明是十進(jìn)制。比如上面那句,改成:
......
else if(parseInt(month,10)<1 || parseInt(month,10) >12)
......
前面好幾次遇到JavaScript中parseInt函數(shù)把字串轉(zhuǎn)為數(shù)字,前面遇到過(guò)幾次問(wèn)題,然后就換其它方法進(jìn)行比較。
當(dāng)我去頁(yè)面取得一個(gè)日歷的東西,然后進(jìn)行轉(zhuǎn)換成數(shù)字進(jìn)行比較 的時(shí)候,月份轉(zhuǎn)換老是出現(xiàn)問(wèn)題,
當(dāng)我用
var num = parseInt(01);
var num = parseInt(01);
...
var num = parseInt(07);
var num = parseInt(08);
var num = parseInt(09);
var num = parseInt(10);
假如當(dāng)我進(jìn)行如上轉(zhuǎn)換的時(shí)候,
parseInt(),傳進(jìn)去的參數(shù)從1到7都沒(méi)有問(wèn)題,可是當(dāng)我用parseInt(08)的時(shí)候就出問(wèn)題,轉(zhuǎn)換出來(lái)的num=0
當(dāng)時(shí)因?yàn)轫?xiàng)目的緊急的原因,也沒(méi)有細(xì)細(xì)的去追究
現(xiàn)在有空了看了一下parseInt這個(gè)javascript方法
javascript 的api的說(shuō)明如下:
parseInt 方法
返回由字符串轉(zhuǎn)換得到的整數(shù)。
parseInt(numString, [radix])
參數(shù)
numString
必選項(xiàng)。要轉(zhuǎn)換為數(shù)字的字符串。
radix
可選項(xiàng)。在 2 和 36 之間的表示 numString 所保存數(shù)字的進(jìn)制的值。如果沒(méi)有提供,則前綴為 '0x' 的字符串被當(dāng)作十六進(jìn)制,前綴為 '0' 的字符串被當(dāng)作八進(jìn)制。所有其它字符串都被當(dāng)作是十進(jìn)制的。
看了如上的api知道了,原來(lái)我轉(zhuǎn)進(jìn)去的參數(shù)為01到08時(shí),參數(shù)以'0'開(kāi)頭,所以轉(zhuǎn)換成了八進(jìn)制。又因?yàn)榘诉M(jìn)制是只能表示0到7所以,當(dāng)我參數(shù)為01到07時(shí)轉(zhuǎn)換正確,當(dāng)為08時(shí)就進(jìn)位了,轉(zhuǎn)換為0.而parseInt(10)又能正解轉(zhuǎn)換為10
所以規(guī)矩的做法是不要省略最后一個(gè)參數(shù),
用parseInt(08,10);就能轉(zhuǎn)換正確了
您可能感興趣的文章:
- js parseInt的陷阱分析小結(jié)
- js中parseInt函數(shù)淺談
- js parsefloat parseint 轉(zhuǎn)換函數(shù)
- javascript中的parseInt和parseFloat區(qū)別
- javascript中parseInt()函數(shù)的定義和用法分析
- javascript parseInt() 函數(shù)的進(jìn)制轉(zhuǎn)換注意細(xì)節(jié)
- JavaScript的parseInt 取整使用
- JS實(shí)現(xiàn)手寫(xiě)parseInt的方法示例
- javascript parseInt 大改造
- Js中parseInt的使用及注意事項(xiàng)
相關(guān)文章
JS之if語(yǔ)句對(duì)接事件動(dòng)作邏輯(詳解)
下面小編就為大家?guī)?lái)一篇JS之if語(yǔ)句對(duì)接事件動(dòng)作邏輯(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-06-06
javascript Function函數(shù)理解與實(shí)戰(zhàn)
小編給大家?guī)?lái)一片關(guān)于javascript的基礎(chǔ)教學(xué)內(nèi)容,關(guān)于Function函數(shù)的訓(xùn)練與理解,一起學(xué)習(xí)下吧。2017-12-12
原生js實(shí)現(xiàn)節(jié)日時(shí)間倒計(jì)時(shí)功能
本文主要分享了原生js實(shí)現(xiàn)節(jié)日時(shí)間倒計(jì)時(shí)功能的示例代碼。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01
為JS擴(kuò)展Array.prototype.indexOf引發(fā)的問(wèn)題及解決辦法
這篇文章主要介紹了為JS擴(kuò)展Array.prototype.indexOf引發(fā)的問(wèn)題及解決辦法,需要的朋友可以參考下2015-01-01

