JSLint说“缺少基数参数”;我该怎么办?

问题描述 投票:454回答:9

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

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

这是有问题的代码:

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

这有什么不对?

javascript jslint radix
9个回答
859
投票

用parseInt传递radix总是一个好习惯 -

parseInt(string, radix)

小数 -

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

如果省略radix参数,则JavaScript假定以下内容:

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

(Qazxswpoi)


0
投票

只需在.eslintrc中添加您的自定义规则,看起来就像 imageIndex = parseInt(id.slice(-1)) - 1; 一样,您将免于这种不必要的警告。这是针对eslint linter。


40
投票

我没有正确回答这个问题,但我认为有必要明确我们为什么要指定基数。

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

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

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

资料来源:Reference


40
投票

要避免此警告,请使用:

MDN parseInt()

您可以将其替换为:

parseInt("999", 10);

请注意,parseInt和Number具有Number("999"); ,但在某些情况下,可以替换另一个。


23
投票

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

插入:

different behaviors

radix: false 文件中的“rules”属性下。

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


21
投票

在JS文件上添加以下内容将告诉JSHint压制基数警告:

tslint.json

另见:/*jshint -W065 */


4
投票

我只用+ foo来解决它,转换字符串。

请记住,它对于可读性(脏修复)并不好。

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

4
投票

您也可以在parseInt行的正上方添加以下行:

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

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


2
投票

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

parseInt(string,radix);

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

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

imageIndex = parseInt(id.substring(id.length - 1)) - 1; // eslint-disable-next-line


0
投票

而不是调用imageIndex = parseInt(id.substring(id.length - 1), '')-1;函数,你可以使用substring

.slice()

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

谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.