今天寫代碼的時候遇到一個問題,獲取了一個span元素的值,但是+1的時候卻出現了25+1=251的情況。原來是獲取的值為字符串,所以對字符串進行了拼接。
我又翻了翻js高程,仔細看了看關于字符串,數字,布爾值的互相轉換問題,這里先介紹字符串轉數字。
js里有三種方法可以完成字符串轉數字,分別是
Number()parseInt()parseFloat()
那么它們有什么區(qū)別呢?
Number()
- 如果字符串只包含數字,則將其轉換為十進制數值,即
"123"會變成123 - 如果字符串包含十六進制格式,例如
"0xf",則將其轉換為相同大小的十進制整數值 - 如果字符串為空,轉換為
0 - 如果是上述格式之外的字符,轉換為
NaN
例如
var num1 = Number("Hello world!"); //NaN
var num2 = Number(""); //0
var num3 = Number("000011"); //NaN
-
parseInt()
由于Number()處理字符串比較復雜且不夠合理,所以處理整數常用parseInt()
parseInt()轉換字符的時候,會識別字符是否符合數值模式,它會忽略字符串前面的空格,從第一個非空格字符開始解析,如果是非數字符號或正負號,則返回NaN。如果第一個非空字符是數字符號或正負號,那么會繼續(xù)解析,直到解析完或遇到非數字符號,比如1234blue會被轉換成1234, 但是需要注意的是,小數點并不算是數字符號,所以22.5會被解析為22。同時也能解析八進制或十六進制的數。
例如
var num1 = parseInt("1234blue"); //1234
var num2 = parseInt(""); //NaN
var num3 = parseInt("22.5"); //22
var num4 = parseInt("070"); //56(八進制數)
var num5 = parseInt("0xf"); //15(十六進制數)
另外一點,由于 parseInt() 在解析八進制數字的時候,ECMAScript3和5存在分歧,所以 parseInt() 可以制定兩個參數,即轉換的進制,比如
var num1 = parseInt("AF", 16); //175
var num2 = parseInt("AF"); //NaN
var num3 = parseInt("10", 2); //2(按二進制解析)
var num4 = parseInt("10", 8); //8(按八進制解析)
var num5 = parseInt("10", 10); //10(按十進制解析)
var num6 = parseInt("10", 16); //16(按十六進制解析)
-
parseFloat()
與parseInt()類似,也是從第一個字符開始解析,但是小數點是有效的,因為parseFloat()解析的不是數字符號,而是浮點數字字符,但第二個小數點就無效了。比如"22.34.5"會背轉換為22.34
需要注意的是parseFloat()只能解析十進制的數字。
例如
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