關(guān)于parselnt()使用方法舉例:
var num3=parselnt(”O(jiān)xA“); //10(十六進(jìn)制數(shù))
var num4=parselnt (22.5)j // 22
var num5=parselnt(”070”)j // 56(八進(jìn)制數(shù))
var num6=parselnt(”7 0”)j // 70(十進(jìn)制數(shù))
var num7=parselnt(“Oxf”); //15(十六進(jìn)制數(shù))
理解這幾個(gè)例子時(shí),最關(guān)鍵的是要注意parselnt()解析”070”和”70”的不同方式。此時(shí)。070中的前導(dǎo)零表示這是一個(gè)八進(jìn)制(而非十進(jìn)制)格式的字符串,因而結(jié)果是56(注意這個(gè)結(jié)果與調(diào)用:umber()函數(shù)不同)。而”70”呢,由于它沒有前導(dǎo)的零,因此就被轉(zhuǎn)換成了70。為了消除在使用parselnt()函數(shù)時(shí)可能導(dǎo)致的上述困惑①,ECMAScript也為這個(gè)函數(shù)提供了第二個(gè)參數(shù):轉(zhuǎn)換時(shí)使用的基數(shù)(即多少進(jìn)制)。
如果知道要解析的值是十六進(jìn)制格式的字符串,那么指定基數(shù)16作為第二個(gè)參數(shù),可以保證得到正確的結(jié)果,例如:
var num=parselnt(”O(jiān)xAF", 16); //175
實(shí)際上,如果指定了16作為第二個(gè)參數(shù),字符串可以不帶前面的”O(jiān)x”,如下所示:
var riurril=parselnt(?!疉F”, 16) //175
var num2=parselnt(”AF”); //NaN
這個(gè)例子中的第一個(gè)轉(zhuǎn)換成功了,而第二個(gè)則失敗了。差別在于第一個(gè)轉(zhuǎn)換傳人了基數(shù),明確告訴parselnt()要解析一個(gè)十六進(jìn)制格式的字符串;而第二個(gè)轉(zhuǎn)換發(fā)現(xiàn)第一個(gè)字符不是數(shù)字字符,因此就自動(dòng)終止了。南昌網(wǎng)絡(luò)公司百恒網(wǎng)絡(luò)前端開發(fā)工程師認(rèn)為指定基數(shù)會(huì)影響到轉(zhuǎn)換的輸出結(jié)果。例如:
var nuffil=parselnt(”10”,2); //2 (按二進(jìn)制解析)
var num2=parselnt(”10“,8); //8 (按八進(jìn)制解析)
var num3=parselnt(”10”,10); //10(按十進(jìn)制解析)
var num4=parselnt(”10”,16)j。 //16(按十六進(jìn)制解析)
由于不指定基數(shù)則意味著讓parselnt()決定如何解析輸入的字符串,因此為了避免錯(cuò)誤的解析,南昌網(wǎng)站建設(shè)公司百恒網(wǎng)絡(luò)前端開發(fā)工程師建議無論在什么情況下都明確指定基數(shù)——特別是在像下面這樣處理八進(jìn)制值的情況下:
var numl=parselnt(”010”)j //8 (按八進(jìn)制解析)
var num2=parselnt(“010”,8); //8 (按八進(jìn)制解析)
var num3=parselnt(“010”,10); //10(按十進(jìn)制解析)
在這個(gè)例子中,”010”會(huì)因第二個(gè)參數(shù)不同而被轉(zhuǎn)換成不同的值。第一行的轉(zhuǎn)換很直觀,即讓parseInt()決定如何轉(zhuǎn)換。由于第一個(gè)字符是”o”而后面也是數(shù)字字符,因而parseInt()假設(shè)它是一個(gè)八進(jìn)制數(shù)。實(shí)際上,parseInt()的這個(gè)默認(rèn)行為與第二行轉(zhuǎn)換中明確指定了基數(shù)的行為是一致的。第三行傳人的基數(shù)是10,因此parselnt()就會(huì)忽略字符串中所有前導(dǎo)的”o”,而只解析其余的數(shù)字字符。 與parseInt()函數(shù)類似,parseFloat()也是從第一個(gè)字符(位置0)開始解析每個(gè)字符。而且也是一直解析到字符串末尾,或者解析到遇見一個(gè)無效的浮點(diǎn)數(shù)字字符為止。也就是說,字符串中的第一個(gè)小數(shù)點(diǎn)是有效的,而第二個(gè)小數(shù)點(diǎn)就是無效的了,因此它后面的字符串將被忽略。舉例來說,”22.34.5”將會(huì)被轉(zhuǎn)換為22.34。除了第一個(gè)小數(shù)點(diǎn)有效之外,parseFloat()與parseInt()的第二個(gè)區(qū)別在于它始終都會(huì)忽略前導(dǎo)的零。parseFloat()可以識(shí)別前面討論過fOFf/有浮點(diǎn)數(shù)值格式,也鈕栝±0印于F;寫符串則始終會(huì)被轉(zhuǎn)換成0。由于parseFloat()只解析十進(jìn)制值,因此它沒有用第二個(gè)參數(shù)指定基數(shù)的用法。最后還要注意一點(diǎn),如果字符包含的是一個(gè)可解析為整數(shù)數(shù)(沒有小數(shù)點(diǎn),或者小數(shù)點(diǎn)后都是零),parseFloat()會(huì)返回整數(shù)。以下是使用parseFloat()轉(zhuǎn)換數(shù)值的幾個(gè)典型示例:
var numl=parseFloat( "123 4blue”); //1234 (整數(shù))
var num2=parseFloat(“OxA"); //0
var num3=parseFloat("22.5"); //22.5
var num4=parseFloat( "22 .34.5");//22 .34
var num5=parseFloat("0908.5"); //908.5
var num6=parseFloat(”3.125e7”); //31250000
①ECMAScrip‘允許實(shí)現(xiàn)把以”o”(不是" Ox"或”O(jiān)X”)開頭的字符串解析為八進(jìn)制或十進(jìn)制數(shù)。而為了避免歧義,在轉(zhuǎn)換這種字符串時(shí),應(yīng)該為parselnt()指定第二個(gè)參數(shù),即轉(zhuǎn)換的基數(shù)?!喜鼍W(wǎng)站公司工程師注
希望對(duì)廣大站長(zhǎng)或網(wǎng)站建設(shè)公司或從事企業(yè)網(wǎng)站建設(shè)的團(tuán)隊(duì)有所幫助,如對(duì)此不太理解的,可以與南昌網(wǎng)絡(luò)公司百恒網(wǎng)絡(luò)技術(shù)部聯(lián)系。我們很高與廣大站長(zhǎng)和網(wǎng)站建設(shè)公司技術(shù)人員分享我們的技術(shù)和經(jīng)驗(yàn)。