in 的回调函数Array.map
有三个参数:
从您链接到的同一个Mozilla 页面:
使用三个参数调用回调:元素的值、元素的索引和正在遍历的 Array 对象。”
所以如果你调用一个parseInt
实际需要两个参数的函数,第二个参数将是元素的索引。
在这种情况下,您最终parseInt
以基数 0、1 和 2 依次调用。第一个与不提供参数相同,因此它基于输入(在本例中为基数 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
所以在这种情况下,你需要包装函数:
['1','2','3'].map(function(num) { return parseInt(num, 10); });
或使用 ES2015+ 语法:
['1','2','3'].map(num => parseInt(num, 10));
(在这两种情况下,最好如图所示明确提供基数parseInt
,否则它会根据输入猜测基数。在一些较旧的浏览器中,前导 0 会导致它猜测八进制,这往往是有问题的。它仍然会如果字符串以0x
.开头,则猜测十六进制。)