版本

no-implicit-coercion

禁止使用简写类型转换

🔧 可修复

此规则报告的一些问题可以通过--fix 命令行 选项自动修复

💡 有建议

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

在 JavaScript 中,有很多不同的方法可以转换值类型。其中一些可能难以阅读和理解。

例如

var b = !!foo;
var b = ~foo.indexOf(".");
var n = +foo;
var n = -(-foo);
var n = foo - 0;
var n = 1 * foo;
var s = "" + foo;
foo += ``;

这些可以用以下代码替换

var b = Boolean(foo);
var b = foo.indexOf(".") !== -1;
var n = Number(foo);
var n = Number(foo);
var n = Number(foo);
var n = Number(foo);
var s = String(foo);
foo = String(foo);

规则详情

此规则旨在标记类型转换的简写表示法,然后建议更具自解释性的表示法。

选项

此规则有三个主要选项和一个覆盖选项,以根据需要允许一些强制转换。

  • "boolean" (默认值为true) - 当此值为true 时,此规则会警告boolean 类型的简写类型转换。
  • "number" (默认值为true) - 当此值为true 时,此规则会警告number 类型的简写类型转换。
  • "string" (默认值为true) - 当此值为true 时,此规则会警告string 类型的简写类型转换。
  • "disallowTemplateShorthand" (默认值为false) - 当此值为true 时,此规则会警告使用${expression} 形式的string 类型转换。
  • "allow" (默认值为empty) - 此数组中的每个条目可以是以下之一:~!!+- --*,这些条目将被允许。

请注意,allow 列表中的运算符+ 将允许+foo (数字强制转换) 以及"" + foo (字符串强制转换)。

布尔值

对于默认的{ "boolean": true } 选项,不正确 代码示例

在游乐场中打开
/*eslint no-implicit-coercion: "error"*/

var b = !!foo;
var b = ~foo.indexOf(".");
// bitwise not is incorrect only with `indexOf`/`lastIndexOf` method calling.

对于默认的{ "boolean": true } 选项,正确 代码示例

在游乐场中打开
/*eslint no-implicit-coercion: "error"*/

var b = Boolean(foo);
var b = foo.indexOf(".") !== -1;

var n = ~foo; // This is a just bitwise not.

数字

对于默认的{ "number": true } 选项,不正确 代码示例

在游乐场中打开
/*eslint no-implicit-coercion: "error"*/

var n = +foo;
var n = -(-foo);
var n = foo - 0;
var n = 1 * foo;

对于默认的{ "number": true } 选项,正确 代码示例

在游乐场中打开
/*eslint no-implicit-coercion: "error"*/

var n = Number(foo);
var n = parseFloat(foo);
var n = parseInt(foo, 10);

var n = foo * 1/4; // `* 1` is allowed when followed by the `/` operator

字符串

对于默认的{ "string": true } 选项,不正确 代码示例

在游乐场中打开
/*eslint no-implicit-coercion: "error"*/

var s = "" + foo;
var s = `` + foo;
foo += "";
foo += ``;

对于默认的{ "string": true } 选项,正确 代码示例

在游乐场中打开
/*eslint no-implicit-coercion: "error"*/

var s = String(foo);
foo = String(foo);

disallowTemplateShorthand

此选项不受string 选项的影响。

对于{ "disallowTemplateShorthand": true } 选项,不正确 代码示例

在游乐场中打开
/*eslint no-implicit-coercion: ["error", { "disallowTemplateShorthand": true }]*/

var s = `${foo}`;

对于{ "disallowTemplateShorthand": true } 选项,正确 代码示例

在游乐场中打开
/*eslint no-implicit-coercion: ["error", { "disallowTemplateShorthand": true }]*/

var s = String(foo);

var s = `a${foo}`;

var s = `${foo}b`;

var s = `${foo}${bar}`;

var s = tag`${foo}`;

对于默认的{ "disallowTemplateShorthand": false } 选项,正确 代码示例

在游乐场中打开
/*eslint no-implicit-coercion: ["error", { "disallowTemplateShorthand": false }]*/

var s = `${foo}`;

允许

使用allow 列表,我们可以覆盖并允许特定的运算符。

对于示例{ "allow": ["!!", "~"] } 选项,正确 代码示例

在游乐场中打开
/*eslint no-implicit-coercion: [2, { "allow": ["!!", "~"] } ]*/

var b = !!foo;
var b = ~foo.indexOf(".");

何时不使用它

如果您不想收到有关类型转换简写表示法的通知,可以安全地禁用此规则。

版本

此规则是在 ESLint v1.0.0-rc-2 中引入的。

资源

更改语言