在你刷算法題刷的太無聊之后,可以試著去看看別的基礎知識,選幾個自己感興趣的語言,把基礎知識鞏固好,今天給大家分享一個比較有意思的前端題目:
['1', '2', '3'].map(parseInt)最后的輸出結果是什么?為什么是這樣的?
有點js基礎的童鞋應該第一反應都是輸出 1,2,3
, 但是如果真是這么簡單的話那我就不會單獨拎出來給大家分享了,話不多說,我直接上正確答案:
正確答案
是不是有點驚訝,為什么會這樣呢?先來了解一下js中數組的map方法以及parseInt方法。
map方法
map() 方法用來遍歷一個數組,并且返回一個新數組,新數組中的元素為原始數組元素調用函數處理后的值。
語法
array.map(function(currentValue, index, arr), thisValue)
我們看map中的參數,有兩個,第一個參數是一個函數,這個是我們經常用到的,第二個參數為對象作為該執行回調時使用,傳遞給函數,一般我們都不用,再來看一下函數的三個參數:
- currentValue,必須的,表示當前元素的值
- index,不是必須的,表示當前元素的索引
- arr,不是必須的,表示當前元素屬于的數組對象
parseInt方法
parseInt() 函數可解析一個字符串,并返回一個整數。
語法
declare function parseInt(s: string, radix?: number): number;
這個方法也接收兩個參數:
- s,必須的,表示想要轉換成數字的字符串
- radix,不是必須的,表示要解析的數字的基數,取值范圍是2~36之間。如果省略該參數或其值為 0,則數字將以 10 為基礎來解析。如果它以 “0x” 或 “0X” 開頭,將以 16 為基數。如果該參數小于 2 或者大于 36,則 parseInt() 將返回 NaN。
也就是說,后面這個參數是進制的意思;所以,我們來看一下下面這組計算:
24K純帥
很好理解哈,首先當解析基數為0時,其默認為10進制,于是就有了下面這個公式:
假設
let A = parseInt('B', C)
那么,式子表示A的C進制是B
求parseInt('B', C) 就相當于B在C進制下的值是多少
打完收工,講得這么透徹應該都理解了吧,還有一個問題就是,為什么可以把parseInt當作map的參數,回到上面map的參數,第一個參數是一個函數,而我們的parseInt本身就是一個函數,所以可以這樣傳,而且map函數中的參數又被作為parseInt的參數。