map(parseInt) 输出分析
分析 ['10', '10', '10'].map(parseInt) 的输出结果
问题
['10', '10', '10', '10', '10'].map(parseInt) 的输出是什么?
解答
parseInt 函数
parseInt() 解析字符串并返回指定基数的整数。
parseInt(string, radix)
参数说明:
string: 要解析的值radix: 基数,介于 2-36 之间的整数,默认为 10- 返回值: 整数或 NaN
map 方法
map() 方法的回调函数接收三个参数:
arr.map(function callback(currentValue, index, array) {
// Return element for new_array
})
currentValue: 当前元素index: 当前索引(可选)array: 原数组(可选)
执行过程
当执行 ['10', '10', '10', '10', '10'].map(parseInt) 时,map 会将 currentValue 和 index 传递给 parseInt:
['10', '10', '10', '10', '10'].map((item, index) => {
return parseInt(item, index)
})
实际执行:
parseInt('10', 0) // 10 (radix 为 0 时,按十进制解析)
parseInt('10', 1) // NaN (不存在一进制)
parseInt('10', 2) // 2 (二进制的 10 是十进制的 2)
parseInt('10', 3) // 3 (三进制的 10 是十进制的 3)
parseInt('10', 4) // 4 (四进制的 10 是十进制的 4)
因此输出结果为:
['10', '10', '10', '10', '10'].map(parseInt)
// [10, NaN, 2, 3, 4]
关键点
map的回调函数会接收三个参数:元素值、索引、原数组parseInt接收两个参数:字符串和基数map(parseInt)会将索引作为基数传入,导致非预期结果radix为 0 时按十进制解析,为 1 时返回 NaN- 正确做法:
arr.map(item => parseInt(item, 10))
目录