有人可以解釋爲什麼這有意想不到的結果:意外的 「地圖」 的結果(JavaScript)的
["1", "2", "3"].map(parseInt);
返回[1大,NaN,NaN的]而不是[1,2,3]
?我可以把它迫使一個單參數函數工作:
["1", "2", "3"].map(function(s) {return parseInt(s);});
,但我不知道究竟是什麼地方出了問題的第一種方式。
有人可以解釋爲什麼這有意想不到的結果:意外的 「地圖」 的結果(JavaScript)的
["1", "2", "3"].map(parseInt);
返回[1大,NaN,NaN的]而不是[1,2,3]
?我可以把它迫使一個單參數函數工作:
["1", "2", "3"].map(function(s) {return parseInt(s);});
,但我不知道究竟是什麼地方出了問題的第一種方式。
本文在最後一個示例中描述了您的問題,與您嘗試執行的操作完全相同。然而,他們所指的博客文章不再存在。
array.map() and parseInt callback
更好的答案應該從Stackoverflow引:
所以,如果你實際上需要兩個參數的函數,則 第二個參數將是元素的索引。
在這種情況下,您最終在 回合中調用了基數爲0,1和2的parseInt。第一個是一樣不提供該參數,所以它 默認爲基座10基1是一個不可能的數量的基礎上,和3是 不是在基體2的有效號碼:
parseInt('1', 0); // OK - gives 1
parseInt('2', 1); // FAIL - 1 isn't a legal radix
parseInt('3', 2); // FAIL - 3 isn't legal in base 2
parseInt
取兩個參數(第二個是基數),這就是爲什麼這不起作用。有關更多信息,請參見此MDN page的底部。引用:
parseInt通常與一個參數一起使用,但需要兩個參數。第二個 是基數對於回調函數,Array.prototype.map傳遞3 自變量:元素,索引,數組。第三個參數是 parseInt忽略,但不是第二個,因此可能的 混淆。
正如其他人所說,問題是由於第二個參數。從MDN
評論:
// parseInt is often used with one argument, but takes two. The second being the radix
// To the callback function, Array.prototype.map passes 3 arguments: the element, the index, the array
// The third argument is ignored by parseInt, but not the second one, hence the possible confusion.
// See the blog post for more details
但是,隨着使用bind
,就可以達到預期的效果:
var _parseInt = function(radix, number) {
return parseInt(number, radix);
}
["1", "2", "3"].map(_parseInt.bind(this, 10));