版本

radix

强制在使用 parseInt() 时保持 radix 参数的一致性

💡 hasSuggestions

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

当使用 parseInt() 函数时,通常会省略第二个参数 radix,并让函数尝试从第一个参数确定它是什么类型的数字。默认情况下,parseInt() 将自动检测十进制和十六进制(通过 0x 前缀)。在 ECMAScript 5 之前,parseInt() 也会自动检测八进制字面量,这引起了问题,因为许多开发人员认为前导 0 会被忽略。

这种混乱导致了始终使用 radix 参数来 parseInt() 以消除意外后果的建议。所以不要这样做

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

这样做

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

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

另一方面,如果代码仅针对符合 ES5 的环境,则传递 radix 10 可能是多余的。在这种情况下,您可能希望禁止使用这样的 radix。

规则详情

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

选项

此规则有两个选项

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

always

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

在 Playground 中打开
/*eslint radix: "error"*/

const num = parseInt("071");

const num1 = parseInt(someValue);

const num2 = parseInt("071", "abc");

const num3 = parseInt("071", 37);

const num4 = parseInt();

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

在 Playground 中打开
/*eslint radix: "error"*/

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

const num1 = parseInt("071", 8);

const num2 = parseFloat(someValue);

as-needed

"as-needed" 选项的错误代码示例

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

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

const num1 = parseInt("071", "abc");

const num2 = parseInt();

"as-needed" 选项的正确代码示例

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

const num = parseInt("071");

const num1 = parseInt("071", 8);

const num2 = parseFloat(someValue);

何时不使用它

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

版本

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

延伸阅读

资源

更改语言