JSLint说“缺少基数参数”

JavaScript

L西门

2020-03-12

我在此JavaScript代码上运行了JSLint,它说:

第32行的字符30处的问题:基数参数丢失。

这是有问题的代码:

imageIndex = parseInt(id.substring(id.length - 1))-1;

怎么了

第1116篇《JSLint说“缺少基数参数”》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

10个回答
GO西门 2020.03.12

只需在.eslintrc中添加自定义规则,该规则看起来像这样 "radix": "off" ,您将摆脱此eslint不必要的警告。这是为eslint短绒棉。

逆天 2020.03.12

在ECMAScript 5之前,parseInt()还自动检测八进制文字,这会引起问题,因为许多开发人员认为前导0将被忽略。

因此,而不是:

var num = parseInt("071");      // 57

做这个:

var num = parseInt("071", 10);  // 71

var num = parseInt("071", 8);

var num = parseFloat(someValue); 

参考

凯泡芙JinJin 2020.03.12

您也可以直接在parseInt行上方添加以下行:

// eslint-disable-next-line

这将禁用eslint检查下一行。如果只需要跳过一两行,请使用此选项。

西门泡芙Jim 2020.03.12

不用调用substring函数就可以使用.slice()

    imageIndex = parseInt(id.slice(-1)) - 1;

在这里,切片中的-1表示从最后一个索引开始切片。

谢谢。

猴子神无 2020.03.12

只需将一个空字符串放在基数位置,因为parseInt()带有两个参数:

parseInt(string,radix);

字符串要解析的值。如果string参数不是字符串,则将其转换为字符串(使用ToString抽象操作)。字符串参数中的前导空格将被忽略。

基数2到36之间的整数,表示上述字符串的基数(数学数字系统中的基数)。为人类常用的十进制数字指定10。始终指定此参数,以消除读者的困惑并保证可预测的行为。当未指定基数时,不同的实现产生不同的结果,通常将值默认为10。

imageIndex = parseInt(id.substring(id.length-1))-1;
imageIndex = parseInt(id.substring(id.length - 1), '')-1;

null 2020.03.12

在JS文件的顶部添加以下内容将告诉JSHint禁止基数警告:

/*jshint -W065 */

另请参阅:http : //jshint.com/docs/#options

猴子村村 2020.03.12

我没有正确回答这个问题,但是,我认为有必要弄清楚为什么我们应该指定基数

在MDN文档中,我们可以阅读以下内容:

如果radix未定义或为0(或不存在),则JavaScript假定以下内容:

  • [...]
  • 如果输入字符串以“ 0”开头,则基数为8(八进制)或10(十进制)。选择哪个基数取决于实现。 ECMAScript 5指定使用10(十进制),但并非所有浏览器都支持。因此,在使用parseInt时始终指定一个基数。
  • [...]

资料来源:MDN parseInt()

十三泡芙 2020.03.12

使用parseInt传递基数始终是一个好习惯-

parseInt(string, radix)

对于小数-

parseInt(id.substring(id.length - 1), 10)

If the radix parameter is omitted, JavaScript assumes the following:

  • If the string begins with "0x", the radix is 16 (hexadecimal)
  • If the string begins with "0", the radix is 8 (octal). This feature is deprecated
  • If the string begins with any other value, the radix is 10 (decimal)

(Reference)

JinJinPro 2020.03.12

为避免此警告,请使用:

parseInt("999", 10);

您可以将其替换为:

Number("999");


请注意,parseInt和Number的行为不同,但是在某些情况下,一个可以替换另一个。

null 2020.03.12

如果您想跳过该测试,则可以关闭此规则。

插入:

radix: false

文件中的“ rules”属性tslint.json

如果您不了解此异常,则不建议这样做。

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android