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
預設 { "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
預設 { "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
預設 { "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
列表,我們可以覆寫並允許特定的運算子。
範例 { "allow": ["!!", "~"] }
選項的正確程式碼範例
在遊樂場開啟
/*eslint no-implicit-coercion: [2, { "allow": ["!!", "~"] } ]*/
var b = !!foo;
var b = ~foo.indexOf(".");
何時不使用它
如果您不想收到關於型別轉換簡短表示法的通知,您可以安全地禁用此規則。
版本
此規則在 ESLint v1.0.0-rc-2 中引入。