1. 程式人生 > >js數值轉換的三種方法

js數值轉換的三種方法

num 小數點 2.3 導致 color float 註意 span defined

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數值轉換的三種方法