2014-01-30 34 views
2

我覺得我正在做一些不喜歡看東西的東西。任何人都可以幫助我理解爲什麼以下不起作用爲什麼arr.map(parseInt)在JavaScript中不起作用?

["1.1", "2.2", "3.3"].map(parseInt); 
//=> [1, NaN, NaN] 

這工作雖然???

["1.1", "2.2", "3.3"].map(function(num) { 
    return parseInt(num); 
}); 
//=> [1, 2, 3] 

這似乎太工作

["1.1", "2.2", "3.3"].map(Number); 
//=> [1.1, 2.2, 3.3] 
+0

注意''「1.1」,「1.1」,「1.1」,「2.2」,「3.3」] map(parseInt);'→'[1,NaN,1,2,3]' –

回答

5

Array.prototype.map通過多個參數回調。特別是它傳遞的第二個參數是正在處理的元素的索引。

parseInt接受多個參數。特別是它接受的第二個參數是您要轉換的數字系統的基礎。

當處理第二個元素時,您調用parseInt("2.2", 1),並且由於2不是基數1中的有效數字,因此結果爲NaN

如果您在parseInt附近聲明瞭一個「包裝器」回調,那麼這些附加參數將丟失,並且所有內容似乎都能正常工作,儘管you should always pass the second argument to parseInt

+0

啊,我知道這是不好看的!感謝您的洞察力。那麼我使用'.map(Number)'有什麼危害呢? – naomik

+0

@naomik:不,'數字'很好。 – Jon

+0

@naomik'.map(parseFloat)'也可以。 –

相關問題