# radix

使用 parseInt() 时强制使用 radix 参数

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

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

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

做这个:

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

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

另一方面,如果代码仅针对符合 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 基数值的存在或省略,您可以关闭此规则。

Last Updated: 5/13/2023, 8:55:38 PM