Javascript中字符串转数字
我們知道最簡潔的數(shù)字轉(zhuǎn)字符串方法是:
var num = 123; var string = num + "";也就是在數(shù)字后面加上一個空字符。那么最簡潔字符串轉(zhuǎn)數(shù)字方法呢?
?
字符串只能進(jìn)行加法(拼接)
字符串進(jìn)行加法(拼接)是很常見的,但是字符串進(jìn)行減法、乘法、除法呢?
這似乎很難定義,實(shí)際上字符串沒有減法、乘法、除法操作。
但Javascript是動態(tài)語言,如果你拿兩個字符串進(jìn)行這三種操作的時(shí)候,他會嘗試將其轉(zhuǎn)成數(shù)字再進(jìn)行相應(yīng)的操作。例如:
alert("45" - "32"); //13 alert("5" * "6"); //30 alert("12" / "3"); //4但這種轉(zhuǎn)換操作和parseInt和parseFloat不太像,而和Number比較像,比如:
alert("123a" - "2bc"); //NaN alert(parseInt("123a") - parseInt("2bc")); //121 alert(Number("123a") - Number("2bc")); //NaN也就是說,這種轉(zhuǎn)換和Number一樣,會將非純數(shù)字型字符串轉(zhuǎn)成NaN,表示其是非數(shù)字。
而parseInt、parseFloat則會取出字符串中取出前面的能表示成數(shù)字的部分,而忽略掉后面不能表示成數(shù)字的部分。
?
最簡潔的字符串轉(zhuǎn)數(shù)字方法
借助字符串在進(jìn)行其不能進(jìn)行的運(yùn)算時(shí)會先嘗試轉(zhuǎn)成數(shù)字這個特性。我們可以對字符串前加上正符號來將字符串轉(zhuǎn)成數(shù)字。如:
var num = +"45"; alert(typeof num); //numberjQuery中有一個這個方法的應(yīng)用,比如我們得到一個字符串怎么判斷他能不能當(dāng)成數(shù)字看待呢?jQuery的方法:
var string = "321"; //這個是得到的字符串,隨意是什么 alert(+string + "" === string); //true表示可以當(dāng)成數(shù)字,否則不行我們注意到,如果string = "000",那么返回是false。
但實(shí)際上jQuery是為了獲取HTML5里的data-Attribute的屬性,由于data-Attribute屬性返回的必然是字符串。如果字符串是"000",那么也不應(yīng)當(dāng)將其看做是數(shù)字0。
thanks?shuaisam
如果要得到字符串是不是由純數(shù)字組成可以這么判斷:
var string = "000"; alert(+string + "" !== "NaN");其實(shí)利用這個特性還有其他方法,比如:
var num = "45" - 0; alert(typeof num); //number var num = "45" * 1; alert(typeof num); //number var num = "45" / 1; alert(typeof num); //number?
進(jìn)制問題?
0x開頭的是16進(jìn)制,所以Number和parseInt都會對16進(jìn)制進(jìn)行相應(yīng)的轉(zhuǎn)換,字符串的自動轉(zhuǎn)換也是這般:
alert(parseInt("0x10")); //16 alert(Number("0x10")); //16 alert(+"0x10"); //16不過parseFloat有些鬧別扭,他不認(rèn)識16進(jìn)制,結(jié)果變成這樣:
alert(parseFloat("0x10")); //0更悲劇的是0開頭的,我們知道0開頭可以用來表示8進(jìn)制,在Number和字符串自動轉(zhuǎn)換中,0開頭會當(dāng)成十進(jìn)制來獲取,如:
alert(Number("010")); //10 alert(+"010"); //10而parseInt中卻很悲催,ECMAScript中并未對此進(jìn)行強(qiáng)制規(guī)定所以出現(xiàn)了下面的情況:
alert(parseInt("010")); //8 in Firefox & IE alert(parseInt("010")); //10 in Chrome╮(╯_╰)╭ 難怪很少見到Javascript中用到8進(jìn)制,如果要確保8進(jìn)制只能使用parseInt的第二個參數(shù)了:
alert(parseInt("010", 8)); //8parseFloat繼續(xù)不認(rèn)識8進(jìn)制,所以:
alert(parseFloat("010")); //10?
?
總結(jié)
以上是生活随笔為你收集整理的Javascript中字符串转数字的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: YIFullScreenScroll
- 下一篇: Java,开源,分享