今天寫(xiě)代碼的時(shí)候遇到一個(gè)問(wèn)題,獲取了一個(gè)span元素的值,但是+1的時(shí)候卻出現(xiàn)了25+1=251的情況躏碳。原來(lái)是獲取的值為字符串,所以對(duì)字符串進(jìn)行了拼接瓮孙。
我又翻了翻js高程唐断,仔細(xì)看了看關(guān)于字符串,數(shù)字杭抠,布爾值的互相轉(zhuǎn)換問(wèn)題脸甘,這里先介紹字符串轉(zhuǎn)數(shù)字。
js里有三種方法可以完成字符串轉(zhuǎn)數(shù)字偏灿,分別是
Number()
parseInt()
parseFloat()
那么它們有什么區(qū)別呢丹诀?
Number()
- 如果字符串只包含數(shù)字,則將其轉(zhuǎn)換為十進(jìn)制數(shù)值翁垂,即
"123"
會(huì)變成123
- 如果字符串包含十六進(jìn)制格式铆遭,例如
"0xf"
,則將其轉(zhuǎn)換為相同大小的十進(jìn)制整數(shù)值 - 如果字符串為空沿猜,轉(zhuǎn)換為
0
- 如果是上述格式之外的字符枚荣,轉(zhuǎn)換為
NaN
例如
var num1 = Number("Hello world!"); //NaN
var num2 = Number(""); //0
var num3 = Number("000011"); //NaN
-
parseInt()
由于Number()
處理字符串比較復(fù)雜且不夠合理,所以處理整數(shù)常用parseInt()
parseInt()
轉(zhuǎn)換字符的時(shí)候啼肩,會(huì)識(shí)別字符是否符合數(shù)值模式橄妆,它會(huì)忽略字符串前面的空格,從第一個(gè)非空格字符開(kāi)始解析祈坠,如果是非數(shù)字符號(hào)或正負(fù)號(hào)害碾,則返回NaN
。如果第一個(gè)非空字符是數(shù)字符號(hào)或正負(fù)號(hào)赦拘,那么會(huì)繼續(xù)解析慌随,直到解析完或遇到非數(shù)字符號(hào),比如1234blue
會(huì)被轉(zhuǎn)換成1234
, 但是需要注意的是阁猜,小數(shù)點(diǎn)并不算是數(shù)字符號(hào)丸逸,所以22.5
會(huì)被解析為22
。同時(shí)也能解析八進(jìn)制或十六進(jìn)制的數(shù)蹦漠。
例如
var num1 = parseInt("1234blue"); //1234
var num2 = parseInt(""); //NaN
var num3 = parseInt("22.5"); //22
var num4 = parseInt("070"); //56(八進(jìn)制數(shù))
var num5 = parseInt("0xf"); //15(十六進(jìn)制數(shù))
另外一點(diǎn)椭员,由于 parseInt()
在解析八進(jìn)制數(shù)字的時(shí)候车海,ECMAScript3和5存在分歧笛园,所以 parseInt()
可以制定兩個(gè)參數(shù),即轉(zhuǎn)換的進(jìn)制侍芝,比如
var num1 = parseInt("AF", 16); //175
var num2 = parseInt("AF"); //NaN
var num3 = parseInt("10", 2); //2(按二進(jìn)制解析)
var num4 = parseInt("10", 8); //8(按八進(jìn)制解析)
var num5 = parseInt("10", 10); //10(按十進(jìn)制解析)
var num6 = parseInt("10", 16); //16(按十六進(jìn)制解析)
-
parseFloat()
與parseInt()
類似研铆,也是從第一個(gè)字符開(kāi)始解析,但是小數(shù)點(diǎn)是有效的州叠,因?yàn)?parseFloat()
解析的不是數(shù)字符號(hào)棵红,而是浮點(diǎn)數(shù)字字符,但第二個(gè)小數(shù)點(diǎn)就無(wú)效了咧栗。比如"22.34.5"
會(huì)背轉(zhuǎn)換為22.34
需要注意的是parseFloat()
只能解析十進(jìn)制的數(shù)字逆甜。
例如
var num1 = parseFloat("1234blue"); //1234
var num2 = parseFloat("22.5"); //22.5
var num3 = parseFloat("22.34.5"); //22.34
var num4 = parseFloat("0xA"); //0