no-implicit-coercion
禁止使用简写类型转换
在 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 = ;
var b = ;
// 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 = ;
var n = ;
var n = ;
var n = ;
对于默认的{ "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 = ;
var s = ;
;
;
对于默认的{ "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 = ;
对于{ "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 中引入的。