我看到了这个奇怪的JavaScript行为示例on twitter
['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的错误还是其他什么?
答案 0 :(得分:106)
parseInt
收到两个参数:string和radix:
var intValue = parseInt(string[, radix]);
而map
处理程序的第二个参数是index:
...使用三个参数调用回调:元素的值, 元素的索引和遍历的Array对象。
答案 1 :(得分:36)
parseInt
使用map传递的前两个参数,并使用第二个参数指定基数。
以下是您的代码中发生的事情:
parseInt('10', 0) // 10
parseInt('10', 1) // NaN
parseInt('10', 2) // 2
parseInt('10', 3) // 3
parseInt('10', 4) // 4
以下是parseInt
上的MDN链接:https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/parseInt。
答案 2 :(得分:5)
来自MDN:
使用三个参数调用回调:元素的值, 元素的索引和遍历的Array对象。
parseInt()
有两个参数。价值和基数。这意味着使用非预期的参数调用parseInt()
函数。