[1, 2, 3].map(parseInt) 输出是什么?为什么?这道面试经典题经常被考到。主要是考察对 map 参数传递和 parseInt 函数签名的理解,避免常见陷阱。
示例代码
以下是演示 [1, 2, 3].map(parseInt) 输出结果的示例代码:
javascript
// 示例代码
const result = [1, 2, 3].map(parseInt);
console.log(result); // 输出 [1, NaN, NaN]
// 为了更清晰地展示内部调用过程,可以写一个等价版本:
const equivalent = [1, 2, 3].map((item, index, array) => {
console.log(`调用 parseInt(${item}, ${index})`);
return parseInt(item, index);
});
console.log(equivalent); // 同样输出 [1, NaN, NaN]
[1, 2, 3].map(parseInt) 的输出是 [1, NaN, NaN]。
原因:
Array.prototype.map 在调用回调函数时会传入三个参数:当前元素、索引和原数组。而 parseInt 函数接受两个参数:要解析的字符串和基数(radix)。因此,实际执行的三次调用为:
parseInt(1, 0)→ 基数0表示自动检测,通常按十进制处理,返回1。parseInt(2, 1)→ 基数1无效,返回NaN。parseInt(3, 2)→ 基数2是二进制,但字符串"3"不是有效的二进制数字,返回NaN。
所以最终结果为 [1, NaN, NaN]。