95

可能重复:
javascript - Array.map 和 parseInt

我在 twitter 上看到了这个奇怪的 JavaScript 行为的例子

['10','10','10','10','10'].map(parseInt)

评估为

[10, NaN, 2, 3, 4]

有人可以解释这种行为吗?我在 chrome 和 firebug 中验证了它

['10','10','10','10','10'].map(function(x){return parseInt(x);})

正确返回一个 10 的数组作为整数。这是对 map() 的不当使用、parseInt 的错误还是其他什么?

4

3 回答 3

111

parseInt接收两个参数:字符串和基数:

var intValue = parseInt(string[, radix]);

map处理程序的第二个参数是索引:

... callback 使用三个参数调用:元素的值、元素的索引和被遍历的 Array 对象。

于 2013-01-25T18:49:19.383 回答
36

parseInt使用 map 传入的前两个参数,并使用第二个参数指定基数。

这是您的代码中发生的事情:

parseInt('10', 0) // 10
parseInt('10', 1) // NaN
parseInt('10', 2) // 2
parseInt('10', 3) // 3
parseInt('10', 4) // 4

这是 MDN 的链接parseInthttps ://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/parseInt 。

于 2013-01-25T18:49:17.847 回答
5

来自 MDN:

callback 使用三个参数调用:元素的值、元素的索引和被遍历的 Array 对象。

parseInt()有两个参数。值和基数。这意味着parseInt()正在使用意外参数调用该函数。

于 2013-01-25T18:50:59.767 回答