「 話不多說進入正題,在快手中看到過一個考題是關於map和parseInt結合使用輸出結果值。」
[1,2,3,4,5].map(parseInt)輸出值
1. 單獨使用map和parseInt感覺沒有什麼問題,但是結合map以及parseInt就可能會感到暈頭轉向的,別慌,慢慢分析即可。答案是多少呢?我就不賣關子了,下面我就公布一下正確答案:[1, NaN, NaN, NaN, NaN]。ps:題外話map和parseInt我就不再講解了,不懂的可以查閱相關方法的使用。原因:由於map的回調函數的參數index索引值作了parseInt的基數radix,導致出現超範圍的radix賦值和不合法的進位解析。(推導過程可以看最後我參考的連結地址)看了原因之後想必大家有所發現了,其實[1,2,3,4,5].map(parseInt)可以等價於下面代碼寫法:parseInt(1, 0); parseInt(2, 1); parseInt(3, 2); parseInt(4, 3); parseInt(5, 4); 這樣就和[1,2,3,4,5].map(parseInt)輸出的值對應上了。parseInt延展出一個有趣的問題,parseInt(12, 2)輸出1,同樣parseInt(1234, 2)也是輸出1,parseInt(11234111, 2)輸出3。其實很簡單,關於二進位(同理其他的進位也是一樣)包含0-1,等於或者超過2parseInt會截取沒有超過的部分。參考:解惑 ["1", "2", "3"].map(parseInt) 為何返回[1,NaN,NaN]
https://blog.csdn.net/freshlover/article/details/19034079