有人可以解释为什么这有意想不到的结果:意外的 “地图” 的结果(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));