为什么JS中map直接传parseInt与箭头函数包裹后执行结果不等
问题核心原因
两个语句执行结果不一致,是忽略了两个JS基础规则:
Array.prototype.map传入的回调函数默认会接收3个参数:当前遍历元素、当前元素索引、遍历的原数组parseInt函数可接收两个参数:第一个是要解析的字符串,第二个是解析使用的进制基数radix
代码执行逻辑拆解
首先 [..."123"] 执行后得到数组 ["1", "2", "3"],我们分别看两个map的执行逻辑:
output2的执行逻辑
你写的回调是 e => parseInt(e),手动限制了只把第一个参数(当前元素)传给parseInt,parseInt没有收到第二个radix参数时,默认按10进制解析:
- 第一次调用:
parseInt("1")→ 返回1 - 第二次调用:
parseInt("2")→ 返回2 - 第三次调用:
parseInt("3")→ 返回3
最终output2结果为[1, 2, 3]
output1的执行逻辑
直接把parseInt作为回调传给map时,map会把所有3个参数都传递给parseInt,parseInt会忽略不认识的第三个参数,只接收前两个:
- 第一次调用:遍历索引为0,实际执行
parseInt("1", 0)→ radix为0时JS默认按10进制解析,返回1 - 第二次调用:遍历索引为1,实际执行
parseInt("2", 1)→ 不存在1进制,合法数字不存在,返回NaN - 第三次调用:遍历索引为2,实际执行
parseInt("3", 2)→ 2进制仅支持0、1两个字符,3是非法字符,返回NaN
最终output1结果为[1, NaN, NaN]
内容的提问来源于stack exchange,提问作者Ronnis
相关产品推荐
相关产品推荐

