關(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)文章
JavaScript CSS修改學(xué)習(xí)第一章 查找位置
在這一章我會(huì)給出查找頁(yè)面上的元素位置的代碼。他能幫助你找到真正的位置,假如你改變了窗口的尺寸,然后再次運(yùn)行代碼,也會(huì)告訴你新的位置。2010-02-02JavaScript中的正則表達(dá)式簡(jiǎn)明總結(jié)
這篇文章主要介紹了JavaScript中的正則表達(dá)式,簡(jiǎn)明總結(jié)了正則中的語(yǔ)法含義和RegExp對(duì)象,需要的朋友可以參考下2014-04-04JavaScript charCodeAt方法入門(mén)實(shí)例(用于取得指定位置字符的Unicode編碼)
這篇文章主要介紹了JavaScript charCodeAt方法入門(mén)實(shí)例,charCodeAt方法用于取得指定位置字符的Unicode編碼,需要的朋友可以參考下2014-10-10打開(kāi)超鏈需要“確認(rèn)”對(duì)話(huà)框的方法
打開(kāi)超鏈需要“確認(rèn)”對(duì)話(huà)框的方法...2007-03-03Javascript中的轉(zhuǎn)義用法實(shí)例代碼
Javascript 中的轉(zhuǎn)義用法一例,需要的朋友可以參考下。2010-11-11用JS實(shí)現(xiàn)一個(gè)TreeMenu效果分享
用JS實(shí)現(xiàn)一個(gè)TreeMenu效果分享,思路比較簡(jiǎn)單,但很實(shí)用2011-08-08