JSLint说“缺少基数参数”;

我在这个JavaScript代码上运行JSLint,它说:

第32行字符30的问题:缺少基数参数。

这是问题中的代码:

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

这里出了什么问题?

401106 次浏览

用parseInt -传递基数始终是一个很好的做法

parseInt(string, radix)

对于十进制-

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

如果省略了radix参数,JavaScript假设如下:

  • 如果字符串以"0x"开头,则基数为16(十六进制)。
  • 如果字符串以&;0&;开头,基数为8(八进制)。此特性已弃用
  • 如果字符串以任何其他值开头,则基数为10(十进制)

(# EYZ0)

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

/*jshint -W065 */

参见:http://jshint.com/docs/#options

我没有正确回答这个问题,但是,我认为清除为什么要指定基数是有意义的。

在MDN文档中,我们可以读到:

如果基数未定义或为0(或不存在),JavaScript假设 : < / p >
  • […]
  • 如果输入字符串以“;0"”开头,基数为8(八进制)或10(十进制)。具体选择哪个基数取决于实现。 ECMAScript 5指定使用10(十进制),但不是所有浏览器都支持这一点。因此,总是指定一个基数 当使用parseInt时,
  • […]

来源:# EYZ0

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

插入:

radix: false

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

如果您不理解这个异常,不建议这样做。

我只用+foo来转换字符串。

请记住,这对可读性不是很好(肮脏的修复)。

console.log( +'1' )
// 1 (int)

你也可以简单地将这一行添加到你的parseInt行上面:

// eslint-disable-next-line

这将禁用下一行的eslint检查。如果你只需要跳过一两行就可以使用这个方法。

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

方法(字符串,基数);

< p >字符串 要解析的值。如果string参数不是字符串,则将其转换为字符串(使用ToString抽象操作)。字符串参数中的前导空格将被忽略 < p >基数 2到36之间的整数,表示上述字符串的基数(数学数字系统中的基数)。指定10为人类常用的十进制数字系统。始终指定此参数以消除读者的困惑并保证可预测的行为。在没有指定基数时,不同的实现会产生不同的结果,通常默认值为10 < p > # EYZ0
# EYZ0 < / b >

为了避免这个警告,不要使用:

parseInt("999", 10);

你可以用:

Number("999");
< p > < br > 注意parseInt和Number有不同的行为,但在某些情况下,一个可以替换另一个

您可以使用.slice()而不是调用substring函数

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

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

谢谢。

简单地在.eslintrc中添加自定义规则,就像这样 # EYZ0 这样你就不用担心这个不必要的警告了。

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

所以与其:

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

这样做:

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


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


var num = parseFloat(someValue);

Reference .