為什麼 parseInt 使用 Array#map 回傳 NaN?
Mozilla 開發者網路指出 [1,4,9].map( Math.sqrt) 回傳 [1,2,3]。但是,將 parseInt 應用於帶有 map 的陣列文字 ['1','2','3'] 會產生 [1, NaN, NaN]。此行為發生在 Firefox 3.0.1 和 Chrome 0.3 中。
根本原因
map 中的回調函數有三個參數:元素的值、它的索引和遍歷的陣列物件。當在映射中呼叫 parseInt 時,索引成為第二個參數,它將其解釋為基數(正在轉換的數字系統的基數)。
在上述情況下,使用基數 0 呼叫 parseInt 、 1 和 2 分別。對於不帶前導零的整數,預設基數為 10。但是,基數 1 無效,基數 2 不支援數字 3。因此,parseInt 對於第二個和第三個元素傳回 NaN。
解決方案
至為了修正這個問題,可以使用包裝函數:
或者,在ES2015 :
或者,在ES2015 :
透過明確提供基數為10,我們確保parseInt正確地將字串解釋為以 10 為基數的整數。以上是為什麼 `parseInt` 與 `Array#map` 一起使用時回傳 `NaN`?的詳細內容。更多資訊請關注PHP中文網其他相關文章!