|
......
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,然后等到下半年客戶才告訴我日期無(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)換正確了
JavaScript技術(shù):關(guān)于javascript中的parseInt使用技巧,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。