JS將常用值轉換為數位

2020-07-16 10:05:03
常用值轉換為數位說明如下:

常用值轉換為數位
1 1
0 0
true 1
false 0
"" 0
undefined NaN
null 0
NaN NaN
Infinity Infinity

把值轉換為數位的常用方法有 3 種,具體說明如下。

使用 parseInt()

parseInt() 是一個全域性方法,它可以把值轉換為整數。轉換的過程如下:
  • 先解析位置 0 處的字元,如果不是有效數位,則直接返回 NaN。
  • 如果位置 0 處的字元是數位,或者可以轉換為有效數位,則繼續解析位置 1 處的字元,如果不是有效數位,則直接返回位置 0 處的有效數位。
  • 以此類推,按照從左到右的順序,逐個分析每個字元,直到發現非數位字元為止。
  • parseInt() 將把前面分析合法的數位字元全部轉換為數值並返回。
console.log(parseInt("123abc"));  //返回數位123
console.log(parseInt("1.73"));   //返回數位1
console.log(parseInt(".123"));   //返回值NaN
浮點數中的點對於 parseInt() 來說屬於非法字元,因此不會轉換小數部分的值。

如果是以 0 開頭的數位字串,則 parseInt() 會把它作為八進位制數位處理:先把它轉換為八進位制數值,然後再轉換為十進位制的數位返回。

如果是以 0x 開頭的數位字串,則 parseInt() 會把它作為十六進位制數位處理:先把它轉換為十六進位制數值,然後再轉換為十進位制的數位返回。
var d = 010;  //八進位制數位字串
var e = 0x10;  //十六進位制數位字串
console.log(parseInt(d));  //返回十進位制數位8
console.log(parseInt(e));  //返回十進位制數位16

parseInt() 也支援基模式,可以把二進位制、八進位制、十六進位制等不同進位制的數位字串轉換為整數。基模式由 parseInt() 函數的第二個引數指定。

範例1

下面程式碼把十六進位制數位字串“123abc”轉換為十進位制整數。
var a = "123abc";  
console.log(parseInt(a,16));  //返回十進位制整數1194684

範例2

下面程式碼把二進位制、八進位制和十進位制數位字串轉換為十進位制的整數。
console.log(parseInt("10",2));  //把二進位制數位 10 轉換為十進位制整數,為 2
console.log(parseInt("10",8));  //把八進位制數位 10 轉換為十進位制整數,為 8
console.log(parseInt("10",10));  //把十進位制數位 10 轉換為十進位制整數,為 10

範例3

如果第一個引數是十進位制的值,包含 0 字首,為了避免被誤解為八進位制的數位,則應該指定第二個引數值為 10,即顯示定義基模式,而不是採用預設基模式。
console.log(parseInt("010"));  //把預設基模式數位 010 轉換為十進位制整數為 10
console.log(parseInt("010",8));  //把八進位制數位 010 轉換為十進位制整數為 8
console.log(parseInt("010",10));  //把十進位制數位 010 轉換為十進位制整數為 10

使用 parseFloat() 函數

parseFloat() 也是一個全域性方法,它可以把值轉換為浮點數,即它能夠識別第一個出現的小數點,而第二個小數點被視為非法。解析過程與 parseInt() 方法相同。
console.log(parseFloat("1.234.5"));  //返回數值 1.234

parseFloat() 的引數必須是十進位制形式的字串,而不能使用八進位制或十六進位制的數位字串。同時,對於數位前面的 0(八進位制數位標識)會忽略,對於十六進位制的數位將返回 0。
console.log(parseFloat("123"));  //返回數值 123
console.log(parseFloat("123abc"));  //返回數值 123
console.log(parseFloat("010"));  //返回數值 10
console.log(parseFloat("0x10"));  //返回數值 0
console.log(parseFloat("x10"));  //返回數值 NaN

使用乘號運算子

如果變數乘以 1,則變數會被 JavaScript 自動轉換為數值。乘以 1 之後,結果沒有發生變化,但是值的型別被轉換為數值。如果值無法被緩緩為合法的數值,則返回 NaN。
var a = 1;  //數值
var b = "1";  //數位字串
console.log(a + (b * 1));  //返回數值 2