在JavaScript中,["1", "2", "3"].map(parseInt) 这个问题经常会引起混淆,因为它涉及到map函数和parseInt函数的参数传递方式。
map函数会对数组中的每个元素调用parseInt函数,并且会传递三个参数给parseInt:当前元素值、当前元素的索引(从0开始)和数组本身。
parseInt函数通常接受两个参数:要转换的字符串和基数(即解析该字符串时使用的进制)。但在这个情况下,由于map传递了三个参数,parseInt会错误地将第二个参数(字符串的索引)作为基数来使用。
因此,调用会变成这样:
parseInt("1", 0) 会返回 1,因为当基数为0时,如果字符串以数字开头,parseInt会假设它是十进制。
parseInt("2", 1) 会返回 NaN,因为基数1不是一个有效的进制。
parseInt("3", 2) 也会返回 NaN,因为基数2(二进制)中不包含数字3。
所以,["1", "2", "3"].map(parseInt) 的结果通常是 [1, NaN, NaN]。
为了避免这种情况,你应该在调用map时提供一个显式指定基数的函数,比如:
javascript
复制
["1", "2", "3"].map(Number);
或者使用箭头函数来确保只传递一个参数给parseInt:
javascript
复制
["1", "2", "3"].map(str => parseInt(str, 10));
这样,你就会得到期望的结果 [1, 2, 3]。