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

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

这是问题中的代码:

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

这里出了什么问题?


当前回答

只要在基数位置放一个空字符串,因为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;

其他回答

只要在基数位置放一个空字符串,因为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;

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

parseInt(string, radix)

对于十进制-

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

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

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

(参考)

你可以使用.slice()代替调用子字符串函数

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

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

谢谢。

只需在.eslintrc中添加自定义规则,就像这样 “基数”:“关闭” 这样你就不用担心这个不必要的警告了。 这是为eslint linter。

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

/*jshint -W065 */

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