为何JavaScript中此简写失效?map传入Number.parseInt结果异常问题
为什么直接用
Number.parseInt作为map回调会得到异常结果? 问题的核心在于**map方法传递给回调的参数,和Number.parseInt接收的参数不匹配**:
map方法会给回调函数传递三个参数:当前遍历的元素、元素的索引值、原数组。Number.parseInt接收两个参数:要解析的字符串、解析时使用的基数(radix,范围是2-36,可选)。
当你直接把Number.parseInt传给map时,map会把前两个参数(元素、索引)当作parseInt的两个参数传入,具体到你的例子:
- 第一个元素
'1',索引0 → 执行parseInt('1', 0):基数0会被浏览器默认当作10处理,解析结果为1。 - 第二个元素
'2',索引1 → 执行parseInt('2', 1):基数1是无效值(基数必须≥2),无法解析,返回NaN。 - 第三个元素
'0',索引2 → 执行parseInt('0', 2):把'0'按二进制解析,结果为0。
而第一种箭头函数写法(num) => Number.parseInt(num),只把当前元素传给parseInt,第二个参数(基数)留空,此时parseInt会默认使用10作为基数,所以所有元素都能正常解析成十进制整数。
内容的提问来源于stack exchange,提问作者Black Wind
相关产品推荐
相关产品推荐

