在你刷算法題刷的太無聊之后捡偏,可以試著去看看別的基礎知識,選幾個自己感興趣的語言,把基礎知識鞏固好霜浴,今天給大家分享一個比較有意思的前端題目:
['1', '2', '3'].map(parseInt)最后的輸出結果是什么?為什么是這樣的蓝纲?
有點js基礎的童鞋應該第一反應都是輸出 1阴孟,2,3
税迷, 但是如果真是這么簡單的話那我就不會單獨拎出來給大家分享了永丝,話不多說,我直接上正確答案:
是不是有點驚訝箭养,為什么會這樣呢慕嚷?先來了解一下js中數組的map方法以及parseInt方法。
map方法
map() 方法用來遍歷一個數組毕泌,并且返回一個新數組喝检,新數組中的元素為原始數組元素調用函數處理后的值。
語法
array.map(function(currentValue, index, arr), thisValue)
我們看map中的參數撼泛,有兩個挠说,第一個參數是一個函數,這個是我們經常用到的愿题,第二個參數為對象作為該執(zhí)行回調時使用损俭,傳遞給函數,一般我們都不用抠忘,再來看一下函數的三個參數:
- 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碎连。
也就是說灰羽,后面這個參數是進制的意思;所以鱼辙,我們來看一下下面這組計算:
很好理解哈廉嚼,首先當解析基數為0時,其默認為10進制倒戏,于是就有了下面這個公式:
假設
let A = parseInt('B', C)
那么怠噪,式子表示A的C進制是B
求parseInt('B', C) 就相當于B在C進制下的值是多少
打完收工,講得這么透徹應該都理解了吧峭梳,還有一個問題就是舰绘,為什么可以把parseInt當作map的參數,回到上面map的參數葱椭,第一個參數是一個函數捂寿,而我們的parseInt本身就是一個函數,所以可以這樣傳孵运,而且map函數中的參數又被作為parseInt的參數秦陋。