no-extra-boolean-cast
禁止不必要的布尔强制转换
在 if
语句的测试等上下文中,表达式结果将已经被强制转换为布尔值,因此通过双重否定 (!!
) 或 Boolean
调用强制转换为布尔值是多余的。例如,以下 if
语句是等效的
if (!!foo) {
// ...
}
if (Boolean(foo)) {
// ...
}
if (foo) {
// ...
}
规则详细信息
此规则禁止不必要的布尔强制转换。
此规则的**不正确**代码示例
在游乐场中打开
/*eslint no-extra-boolean-cast: "error"*/
var foo = !;
var foo = ? baz : bat;
var foo = Boolean();
var foo = new Boolean();
if () {
// ...
}
if () {
// ...
}
while () {
// ...
}
do {
// ...
} while ();
for (; ; ) {
// ...
}
此规则的**正确**代码示例
在游乐场中打开
/*eslint no-extra-boolean-cast: "error"*/
var foo = !!bar;
var foo = Boolean(bar);
function qux() {
return !!bar;
}
var foo = bar ? !!baz : !!bat;
选项
此规则有一个对象选项
"enforceForInnerExpressions"
设置为true
时,除了检查默认上下文外,还会检查表达式中是否存在额外的布尔强制转换,这些表达式的结果用于布尔上下文中。请参阅下面的示例。默认值为false
,这意味着默认情况下,此规则不会警告内部表达式中的额外布尔强制转换。
已弃用: 对象属性 enforceForLogicalOperands
已弃用 (eslint#18222)。请改用 enforceForInnerExpressions
。
enforceForInnerExpressions
将 "enforceForInnerExpressions"
选项设置为 true
时,此规则的**不正确**代码示例
在游乐场中打开
/*eslint no-extra-boolean-cast: ["error", {"enforceForInnerExpressions": true}]*/
if ( || bar) {
//...
}
while ( && bar) {
//...
}
if (( || bar) && ) {
//...
}
var foo = new Boolean( || baz);
foo && ? baz : bat;
const ternaryBranches = Boolean(bar ? : bat);
const nullishCoalescingOperator = Boolean(bar ?? );
const commaOperator = Boolean((bar, baz, ));
// another comma operator example
for (let i = 0; console.log(i), ; i++) {
// ...
}
将 "enforceForInnerExpressions"
选项设置为 true
时,此规则的**正确**代码示例
在游乐场中打开
/*eslint no-extra-boolean-cast: ["error", {"enforceForInnerExpressions": true}]*/
// Note that `||` and `&&` alone aren't a boolean context for either operand
// since the resultant value need not be a boolean without casting.
var foo = !!bar || baz;
if (foo || bar) {
//...
}
while (foo && bar) {
//...
}
if ((foo || bar) && baz) {
//...
}
var foo = new Boolean(bar || baz);
foo && bar ? baz : bat;
const ternaryBranches = Boolean(bar ? baz : bat);
const nullishCoalescingOperator = Boolean(bar ?? baz);
const commaOperator = Boolean((bar, baz, bat));
// another comma operator example
for (let i = 0; console.log(i), i < 10; i++) {
// ...
}
// comma operator in non-final position
Boolean((Boolean(bar), baz, bat));
版本
此规则是在 ESLint v0.4.0 中引入的。