JavaScript中map与parseInt转换数组异常的原因及解决办法
为什么
['2023', '12', '0'].map(parseInt)返回[2023, NaN, 0]? 我尝试用map方法结合parseInt函数将字符串数组转换为整数数组时,发现执行['2023', '12', '0'].map(parseInt)返回的结果是[2023, NaN, 0],和预期的整数数组不符。只有改写为['2023', '12', '0'].map(elem => parseInt(elem))才能得到正确结果。
查阅parseInt文档得知它可接受1或2个参数,这正是问题的根源。
核心原因是map方法会向传入的回调函数传递三个参数:当前元素值、元素的数组索引以及数组本身。而parseInt的第二个参数是解析时使用的基数(radix),所以数组的索引被错误地当作了基数参数:
parseInt('2023', 0, ['2023', '12', '0']); // 正常返回2023,基数0会被视为10(因为'2023'符合十进制格式) parseInt('12', 1, ['2023', '12', '0']); // 返回NaN,1不是合法的基数(合法基数范围是2-36) parseInt('0', 2, ['2023', '12', '0']); // 正常返回0,以2为基数解析'0'结果就是0
内容的提问来源于stack exchange,提问作者Donghua Liu
相关产品推荐
相关产品推荐

