JavaScript的數值轉換函數——parseInt

有 3 個函數可以把非數值轉換爲數值: Number()、 parseInt() 和 parseFloat()。轉型函數 Number() 可以用於任何數據類型,parseInt() 和  parseFloat() 函數則專門用於把字符串轉換成數值。這裏說說 parseInt() 函數。

parseInt() 函數更多是看其是否符合數值模式。

1、它會忽略字符串前面的空格,直至找到第一個非空格字符。

2、如果第一個字符不是數字字符或者負號, parseInt()就會返回 NaN;

3、如果第一個字符是數字字符, parseInt()會繼續解析第二個字符,直到解析完所有後續字符或者遇到了一個非數字字符。

舉個例子

var num1 = parseInt(12)       //12
var num2 = parseInt("12")     //12
var num3 = parseInt(" 12 ")   //12
var num4 = parseInt("12abc")  //12
var num5 = parseInt("abc12")  //NaN
var num6 = parseInt(" ")      //NaN
var num7 = parseInt("-12abc") //-12
var num8 = parseInt("-12.3")  //-12

如果字符串中的第一個字符是數字字符, parseInt()也能夠識別出各種整數格式(十進制、八進制和十六進制數)。

1、字符串以 1 ~ 9 的數字開頭,會把它解析爲十進制的整數。

2、字符串以"0"開頭且後跟數字字符,則會將其當作一個八進制數來解析。

3、字符串以"0x"開頭且後跟數字字符,就會將其當作一個十六進制整數。

舉個例子

var num1 = parseInt(12)   //12
var num2 = parseInt(012)  //10
var num3 = parseInt(0x12) //18

num1:10進制數轉爲10進制;

num2:8進制數轉爲10進制;

num3:16進制數轉爲10進制。

tip:在使用 parseInt() 解析像八進制字面量的“0”開頭的字符串時, ECMAScript 3 和 5 存在分歧。ECMAScript 3 使用的是8進制,ECMAScript 5使用的是十進制。例如:
var num = parseInt("070"); //ECMAScript 3 認爲是 56(八進制), ECMAScript 5 認爲是 70(十進制)

爲了消除在使用 parseInt()函數時可能導致的上述困惑,可以爲這個函數提供第二個參數:轉換使用的基數(即多少進制,範圍爲2 ~ 36)。第二個參數是用來說明要轉換的字符串是什麼進制,而不是 parseInt() 要將傳入的字符串轉換爲什麼進制的數(我以前一直搞錯了— _ —|| ):parseInt(string, radix)

1、如果指定了 16 作爲第二個參數,字符串可以不帶前面的"0x"

2、如果指定了 8 作爲第二個參數,字符串可以不帶前面的"0"

3、第二個參數範圍爲2~36,不在其範圍返回NaN

4、如果第二個參數省略或爲0,並且不以0x開頭,則會將其當作一個10進制數來解析;以0x開頭,則將其當作16進制數解析。

舉個例子

var num1 = parseInt("0x1A", 16) //26
var num2 = parseInt("1A", 16)   //26
var num3 = parseInt("1A")       //1
var num4 = parseInt("012", 8)   //10
var num5 = parseInt("12", 8)    //10
var num6 = parseInt("012")      //12
var num7 = parseInt(012)        //10
var num8 = parseInt("12", 1)    //NaN
var num9 = parseInt(1, 37)      //NaN
var num10 = parseInt(12, 0)     //12
var num11 = parseInt(0x12, 0)   //18

關於 parseInt() 的筆試題:

以下代碼輸出的是什麼?

var arr=[1,2,3,2,5]; 
console.log(arr.map(parseInt));

輸出:[1, NaN, NaN, 2, NaN]

解析:因爲 arr.map 方法就是對於數組arr裏面的每一項都去使用方法裏面的函數,最後返回新數組,因爲map方法會有索引,所以實際上是:

parseInt(1,0);//1,因爲0表示十進制
parseInt(2,1);//不在範圍內
parseInt(3,2);// 2進制,但是3不在0——2範圍內,所以不符合2進制要求
parseInt(2,3);//符合,因爲三進制是0-3,而2在範圍內
parseInt(5,4);//4進制不包括5,所以NaN

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章