我們知道最簡(jiǎn)潔的數(shù)字轉(zhuǎn)字符串方法是:
var num = 123 ; var string = num + "";也就是在數(shù)字后面加上一個(gè)空字符。那么最簡(jiǎn)潔字符串轉(zhuǎn)數(shù)字方法呢?
?
字符串只能進(jìn)行加法(拼接)
字符串進(jìn)行加法(拼接)是很常見(jiàn)的,但是字符串進(jìn)行減法、乘法、除法呢?
這似乎很難定義,實(shí)際上字符串沒(méi)有減法、乘法、除法操作。
但Javascript是動(dòng)態(tài)語(yǔ)言,如果你拿兩個(gè)字符串進(jìn)行這三種操作的時(shí)候,他會(huì)嘗試將其轉(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
也就是說(shuō),這種轉(zhuǎn)換和Number一樣,會(huì)將非純數(shù)字型字符串轉(zhuǎn)成NaN,表示其是非數(shù)字。
而parseInt、parseFloat則會(huì)取出字符串中取出前面的能表示成數(shù)字的部分,而忽略掉后面不能表示成數(shù)字的部分。
?
最簡(jiǎn)潔的字符串轉(zhuǎn)數(shù)字方法
借助字符串在進(jìn)行其不能進(jìn)行的運(yùn)算時(shí)會(huì)先嘗試轉(zhuǎn)成數(shù)字這個(gè)特性。我們可以對(duì)字符串前加上正符號(hào)來(lái)將字符串轉(zhuǎn)成數(shù)字。如:
var num = +"45" ; alert( typeof num); // number
jQuery中有一個(gè)這個(gè)方法的應(yīng)用,比如我們得到一個(gè)字符串怎么判斷他能不能當(dāng)成數(shù)字看待呢?jQuery的方法:
var string = "321"; // 這個(gè)是得到的字符串,隨意是什么 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í)利用這個(gè)特性還有其他方法,比如:
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)制問(wèn)題?
0x開(kāi)頭的是16進(jìn)制,所以Number和parseInt都會(huì)對(duì)16進(jìn)制進(jìn)行相應(yīng)的轉(zhuǎn)換,字符串的自動(dòng)轉(zhuǎn)換也是這般:
alert(parseInt("0x10")); // 16 alert(Number("0x10")); // 16 alert(+"0x10"); // 16
不過(guò)parseFloat有些鬧別扭,他不認(rèn)識(shí)16進(jìn)制,結(jié)果變成這樣:
alert(parseFloat("0x10")); // 0
更悲劇的是0開(kāi)頭的,我們知道0開(kāi)頭可以用來(lái)表示8進(jìn)制,在Number和字符串自動(dòng)轉(zhuǎn)換中,0開(kāi)頭會(huì)當(dāng)成十進(jìn)制來(lái)獲取,如:
alert(Number("010")); // 10 alert(+"010"); // 10
而parseInt中卻很悲催,ECMAScript中并未對(duì)此進(jìn)行強(qiáng)制規(guī)定所以出現(xiàn)了下面的情況:
alert(parseInt("010")); // 8 in Firefox & IE
alert(parseInt("010")); // 10 in Chrome
╮(╯_╰)╭ 難怪很少見(jiàn)到Javascript中用到8進(jìn)制,如果要確保8進(jìn)制只能使用parseInt的第二個(gè)參數(shù)了:
alert(parseInt("010", 8)); // 8
parseFloat繼續(xù)不認(rèn)識(shí)8進(jìn)制,所以:
alert(parseFloat("010")); // 10
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
