Skip to content

["1", "2", "3"].map(parseInt) 解析

实际结果

运行 ["1", "2", "3"].map(parseInt) 会得到 [1, NaN, NaN]

原因分析

  1. map() 会给回调函数传递三个参数:

    • 当前元素值
    • 当前元素索引
    • 整个数组
  2. parseInt() 接受两个参数:

    • 要解析的字符串
    • 基数(进制,范围是 2-36)

所以实际执行的是:

javascript
parseInt("1", 0) // 1 (0被视为默认值/十进制)
parseInt("2", 1) // NaN (基数必须是2-36)
parseInt("3", 2) // NaN (3在二进制中无效)

正确写法

如果想正确地将所有元素转换为数字,应该使用:

javascript
["1", "2", "3"].map(Number) // [1, 2, 3]

或者明确指定回调函数:

javascript
["1", "2", "3"].map(str => parseInt(str, 10)) // [1, 2, 3]