版本

radix

在使用 parseInt() 时强制一致地使用基数参数

💡 hasSuggestions

此规则报告的一些问题可以通过编辑器建议手动修复

使用 parseInt() 函数时,通常会省略第二个参数(基数),并让函数尝试根据第一个参数确定数字的类型。默认情况下,parseInt() 将自动检测十进制和十六进制(通过 0x 前缀)。在 ECMAScript 5 之前,parseInt() 还自动检测八进制字面量,这会导致问题,因为许多开发人员假设前导 0 将被忽略。

这种混淆导致了建议始终将基数参数用于 parseInt() 以消除意外后果。因此,不要这样做

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

这样做

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

ECMAScript 5 更改了 parseInt() 的行为,使其不再自动检测八进制字面量,而是将其视为十进制字面量。但是,第一个参数的十六进制和十进制解释之间的差异导致许多开发人员继续使用基数参数以确保字符串以预期的方式解释。

另一方面,如果代码仅针对兼容 ES5 的环境,则传递基数 10 可能就是冗余的。在这种情况下,您可能希望禁止使用此类基数。

规则详情

此规则旨在防止将字符串意外转换为与预期不同的基数的数字,或者在仅针对现代环境时防止冗余的 10 基数。

选项

此规则有两个选项

  • "always" 强制提供基数(默认)
  • "as-needed" 禁止提供 10 基数

always

对于默认的 "always" 选项,错误代码示例

在游乐场中打开
/*eslint radix: "error"*/

var num = parseInt("071");

var num = parseInt(someValue);

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

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

var num = parseInt();

对于默认的 "always" 选项,正确代码示例

在游乐场中打开
/*eslint radix: "error"*/

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

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

var num = parseFloat(someValue);

as-needed

对于 "as-needed" 选项,错误代码示例

在游乐场中打开
/*eslint radix: ["error", "as-needed"]*/

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

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

var num = parseInt();

对于 "as-needed" 选项,正确代码示例

在游乐场中打开
/*eslint radix: ["error", "as-needed"]*/

var num = parseInt("071");

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

var num = parseFloat(someValue);

何时不使用它

如果您不想强制执行 10 基数值的存在或省略,则可以关闭此规则。

版本

此规则是在 ESLint v0.0.7 中引入的。

进一步阅读

资源

更改语言