版本

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

預設 { "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

預設 { "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

預設 { "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 列表,我們可以覆寫並允許特定的運算子。

範例 { "allow": ["!!", "~"] } 選項的正確程式碼範例

在遊樂場開啟
/*eslint no-implicit-coercion: [2, { "allow": ["!!", "~"] } ]*/

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

何時不使用它

如果您不想收到關於型別轉換簡短表示法的通知,您可以安全地禁用此規則。

版本

此規則在 ESLint v1.0.0-rc-2 中引入。

資源

變更語言