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 中引入。