【JavaScript面试题-经典输出题】[1, 2, 3].map(parseInt) 输出是什么?为什么?

0 阅读1分钟

[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]