JS深入理解 探索parseInt函式

2021-09-27 13:26:32 字數 3038 閱讀 8701

看到這樣一道題目:['1','2','3'].map(parseint)執行結果是什麼?為什麼?

執行結果是:

[1, nan, nan]
我們將題目的**轉換一下:

[

'1',

'2',

'3']

.map

((item,index)

=>

)

相當於:

parseint

('1',0

);// 1 why??

parseint

('2',1

);// nan why??

parseint

('3',2

);// nan why??

帶著思考我們來擴充套件下parseint的知識點。

parseint(str[,radix])能夠將乙個字串數值轉換為radix進製的整數。【see mdn】

引數: str

如 str 不是字串,則先將其轉為字串,通過tostring 抽象操作進行轉換,字串開頭的空格將會被忽略。

引數: radix

radix 取值範圍是 2~36,預設是 10,建議使用的時候明確指定。

返回值

返回解析後的結果,如果被解析引數的第乙個字元無法被轉換成數值型別,則返回nanradix(例如n) 引數會把str當作是這個數的 n 進製表示,返回結果是10進製。

例如:

parseint

('023',8

)//將 '023'看作是8進製數,返回10進製數:0x8^2+2x8^1+3x8^0 = 19

示例一:

parseint

('1',0

)// 1

parseint

('012'

)// 12 似乎和以下的規則3有矛盾,這裡暫時不知道原因,當然不建議這麼寫

parseint

('0x12'

)// 18

當 radix 為0或者沒有設定時,parseint會根據 str 來判斷基數。

以"1~9"數值開頭,則會解析為10進製的整數;

以"0x"數值開頭,則會把其餘部分解析為16進製制的整數。

以"0"數值開頭,則會把其餘部分解析為8進製或者16進製制(這裡存在風險,可能會出錯,建議明確指定基數)

示例二:

parseint

('2',1

)//nan 其中1不在2~36範圍內

parseint

('3',2

)//nan 除'1','0'外,其他均不能用來表達二進位制數

示例三:

parseint

('0xf',16

)//15 f 用10進製表示是15

parseint

('f',16

)//15

示例四:

parseint

('17',8

)//15 1x8^1+7x8^0 = 15

parseint

(021,8

)//15 021是非字串,首先通過tostring轉換成 '17',再轉換成10進製。

示例五:

parseint

(0.00000000000434,10

)//4 非常小的數,會忽略掉前面的0,保留剩下的第乙個數值

parseint

(0.00000100000434,10

)//0

parseint

(0.00000010000434,10

)//1 小數點7位之後會認為是非常小的數

parseint

(4.7

*1e22,10

)// 4 非常大的數,忽略第一位之後的

我們可以看到 parseint 有時候的轉換不如預期,規則也很多,因此在實際的開發過程中需要更加嚴格的校驗。可以使用lodash的parseint或者封裝乙個(摘抄自mdn):

// 通過正則來嚴格匹配

letfilterint

=function

(value)

console.

log(

filterint

('421'))

;// 421

console.

log(

filterint

('-421'))

;// -421

console.

log(

filterint

('+421'))

;// 421

console.

log(

filterint

('infinity'))

;// infinity

console.

log(

filterint

('421e+0'))

;// nan

console.

log(

filterint

('421hop'))

;// nan

console.

log(

filterint

('hop1.61803398875'))

;// nan

console.

log(

filterint

('1.61803398875'))

;// nan

js深入理解 一

1if a b 兩者等價 a b alert hello word 2.給eval取別名var a 111 var b eval var c b a alert c 輸出 111 3.刪除元素 不能刪除 var語句宣告的變數 var o delete o.x alert o.x 輸出 undefin...

js深入理解(二)

1.函式閉包var scope global scope function checkscope return f checkscope 輸出local scope var scope global scope function checkscope return f checkscope 輸出lo...

js深入理解(三)

1.物件的三個屬性 原型屬性 object.getprototypeof a 獲取a的原型 a.constructor.prootype 獲取a的原型 推薦 o.isprototypeof a 判讀o是否是a的原型 類屬性 function classof o classof o 輸出object ...