eslint 规则之 《Missing radix parameter》

eslint 规则连接:https://eslint.org/docs/rules/radix

原文规则错误描述解读

在我们使用parseInt 的时候,应该设置第二个参数据,而不能不写使用默认。
在这里插入图片描述

思考

parseInt 第二个参数radix 是什么意思

语法:

parseInt(string, radix)

参数描述:

参数描述
string必需。要被解析的字符串。
radix可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间。

数字的基数是什么意思呢?

基数(cardinal number)在数学上,是集合论中刻画任意集合大小的一个概念。两个能够建立元素间一一对应的集合称为互相对等集合。例如3个人的集合和3匹马的集合可以建立一一对应,是两个对等的集合。

百度了下基数的概念,然后试验了一下,是不是所谓的进制。

因为radix该值介于 2 ~ 36 之间,所以我从2开始试验:

在这里插入图片描述

可以看出函数将字符串按照每一位进行划分,比如 ‘16’分为 1和6,如果每一位在基数范围内,则不是NAN否则,是NAN。

在看下数值怎么结算的呢?是不是按照基数的进制来的?

在这里插入图片描述

161 被分为 161 6不在范围内,后面不计算最后得:

1 * 5^ 0 = 1

123 被分为 123 都在范围内,计算最后得:

1 * 5^ 2 + 2 * 5^ 1 + 3 * 5^0 = 25 + 10+3 = 38

虽然还是不明白基数在集合中的全部定义,大概知道的意思是,前面被分解后的数,是不是在基数的集合里,如果第一个不再则返回NAN,如果第一个在,后面的哪个不在,在哪里停止。

最后计算按照基数进制计算。

parseInt 第二个参数radix 默认值是什么

那么parseInt默认值,是不是10呢?默认值是10,传入0 会以10处理。

查看v8 parseInt 源码可以看出:

if (radix == 0) { //如果传入radix是0,则以10进行处理
    // Radix detection.
    radix = 10;
    if (*current == '0') {
      ++current;
      if (current == end) return SignedZero(negative);
      if (*current == 'x' || *current == 'X') {
        radix = 16;
        ++current;
        if (current == end) return JunkStringValue();
      } else {
        leading_zero = true;
      }
    }
  } else if (radix == 16) { //16进制
    if (*current == '0') {
      // Allow "0x" prefix.
      ++current;
      if (current == end) return SignedZero(negative);
      if (*current == 'x' || *current == 'X') {
        ++current;
        if (current == end) return JunkStringValue();
      } else {
        leading_zero = true;
      }
    }
  }
  
  if (radix < 2 || radix > 36) return JunkStringValue(); //radix不在2~36之间的处理

总结

parseInt用的时候比较简单,但是理解第二个参数还是有些抽象。不要以为然的写代码,一定弄清其中真相。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星宇大前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值