js數值轉換的三種方法
js非數值轉換為數值的三種寫法分別為Number()、parseInt()、parseFloat()。
Number()是最復雜的。規則如下:
1.數值直接輸出;
console.log(Number(‘11‘));//輸出11;
2.Boolean值,true轉換成1,false轉換成0;
console.log(Number(true));//輸出1;
console.log(Number(false));//輸出0;
3.null轉換成0,undefined轉換成NaN
console.log(Number(null));//輸出0;
console.log(Number(undefined));//輸出NaN;
4.字符串轉換又有很多規則:
(1)字符串只包含數字,會轉換成十進制,忽略前面的0,例如
console.log(Number(‘011‘));//輸出11;
(2)字符串包含有效的浮點格式,會轉換成小數,同樣忽略前面的0,例如
console.log(Number(‘000.11‘));//輸出0.11;
(3)字符串包含有效的十六進制格式,會轉換成大小相等的十進制格式數值輸出
console.log(Number(‘0xa‘));//輸出10;
(4)字符串為空,不包含任何字符,轉換為0
console.log(Number(‘‘));//輸出0;
(5)除以上字符串外的字符串,轉換為NaN
console.log(Number(‘Hello!‘));//輸出NaN;
Number()的轉換規則確實有些復雜了。並且在某些情況下可能並不是我們想要的結果。通常我們用parseInt()來進行數值的轉換。
parseInt()不會轉換非數值模式的格式。它會忽略字符串前面的空格,直到找到一個非空格字符:
1.如果這個字符不是數字符號或者負號,則返回NaN
console.log(parseInt(‘ Hello!‘));//輸出NaN;
空字符串返回NaN,這一點跟Number()不同。
console.log(parseInt(‘ ‘));//輸出NaN;
如果是數字符號或者負號,會繼續解析第二個,直到解析完所有或者遇到非數字符號字符
console.log(parseInt(‘123hehe‘));//輸出123;
非字符後面的數字也會被忽略
console.log(parseInt(‘123hehe123‘));//輸出123;
小數點是非數字符號字符,會導致解析中止。
console.log(parseInt(‘12.3‘));//輸出12
如果第一個非空格字符是數字,parseInt()可以解析各種整數格式,包括八進制,十進制,十六進制
console.log(parseInt(‘070‘));//es3輸出56(八進制),es5輸出70(十進制); console.log(parseInt(‘70‘));//70(十進制); console.log(parseInt(‘0xa‘));//10(十六進制);
可見es3和es5在解析八進制存在差異,es5已經不具備解析八進制的能力。因此我們有必要使用parseInt()的第二個參數
console.log(parseInt(‘070‘,8));//輸出56; console.log(parseInt(‘070‘,10));//輸出70; console.log(parseInt(‘70‘,8));//輸出56; console.log(parseInt(‘70‘,10));//輸出70; console.log(parseInt(‘0xa‘,16));//輸出10;
如果指定16作為第二個參數,前面的0x就可以省略了,如果沒指定則不能省略,否則返回NaN
console.log(parseInt(‘a‘,16));//輸出10;
console.log(parseInt(‘a‘));//輸出NaN;
建議使用parseInt()任何時候都加上轉換基數。
parseInt()不能轉換浮點型數值,我們用parseFloat()來解決。
parseFloat()跟parseInt()差不多,同樣會從第一個非空字符串開始解析,直到解析完畢,或者遇到非浮點型數值格式(區別一),但是它會忽略前面所有的0,他沒有轉換基數,只解析十進制的值(區別二)
console.log(parseFloat(‘ 123hehe‘));//輸出123; console.log(parseFloat(‘123hehe‘));//輸出123; console.log(parseFloat(‘01.2.3‘));//輸出1.2; console.log(parseFloat(‘0xa‘));//輸出0
註意,如果字符串可以解析為整數,則小數點後面的0不會輸出
console.log(parseFloat(‘1.000‘));//輸出1;
js數值轉換的三種方法