看到這樣一道題目:['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,建議使用的時候明確指定。
返回值
返回解析後的結果,如果被解析引數的第乙個字元
無法被轉換成數值型別,則返回nan
。radix
(例如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 ...