您好,登錄后才能下訂單哦!
這篇文章主要介紹“JS面試題['1', '7', '11'].map(parseInt)怎么解決”,在日常操作中,相信很多人在JS面試題['1', '7', '11'].map(parseInt)怎么解決問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”JS面試題['1', '7', '11'].map(parseInt)怎么解決”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
['1', '7', '11'].map(parseInt) // 結果輸出 -> [1, NaN, 3]
為什么輸出會有 NaN
? 為什么把 11
轉成整數會是 3
?
想把數組里的字符串數字轉換成整數,于是使用 map函數來對數組的每一項作用,作用的函數是 parseInt函數,所以預期的結果應該是[1,7,11]
,然而最終瀏覽器的 JavaScript 引擎給出的答案是 [1, NaN, 3]
。
從結果可以看到 1 是正常進行轉化的,后面兩個數則不是我們預期的結果。
現在我們把 parseInt
換掉,功能改為給每一個數乘 2
['1', '7', '11'].map(function(x){ return x * 2; // 結果 -> [2, 14, 22] });
發現結果是正常的,x
代表從數組里拿到的每一個值,在依次去乘以2
,沒問題。
可是問題來了,除了x
,會不會有其它參數,存不存在其它可以使用的參數。于是我們試驗下:
['1', '7', '11'].map(function(x, i, j, k){ console.log(x +' ' + i + ' ' + j + ' ' + k); });
在 Chrome
的控制臺執行后發現結果出乎意料
也就是說,map
接受的這個函數,它存在三個參數,第一個是數組當前的值,第二個是當前值的索引,第三個數是當前傳入的數組
當我們傳入 parseInt
時,map
函數會把三個參數(數組當前元素,當前元素的索引,當前傳入的數組)一并打包給 parseInt
。
那么現在問題就集中在 parseInt
函數上面。
從 MDN
文檔查詢后可以知道,parseInt(string, radix)
函數接受兩個參數,第一個是需要轉換的字符串,第二個是進制。
于是結果呼之欲出,我把這個過程畫成了圖,方便看圖理解,
首先,parseInt 接受兩個參數,因此第三個參數會被忽略。
第一次執行, parseInt('1', 0) 會輸出 1 ,因為 0 會轉換成 false,而 false 會使它執行默認的進制 10 ,就是 parseInt 默認都是轉換十進制;
第二次執行,parseInt('7', 1) 因為沒有所謂的 1 進制,所以無法轉換,輸出 NaN;
第三次執行parseInt('11', 2) 答案為 3 ,因為以 2 為進制轉換,3 的二進制是 11 , 非常的巧妙。
所以最終的輸出的結果就是 [1, NaN, 3]
到此,關于“JS面試題['1', '7', '11'].map(parseInt)怎么解決”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。