# no-extra-boolean-cast

禁止不必要的布尔类型转换

配置文件中的 "extends": "eslint:recommended" 属性启用了该规则

一些该规则报告的问题可以通过 --fix 命令行选项 自动修复

if 语句的测试等上下文中,表达式的结果已经被强制转换为布尔值,不需要通过双重否定 (!!) 或 Boolean 调用转换为布尔值。例如,这些 if 语句是等效的:

if (!!foo) {
    // ...
}

if (Boolean(foo)) {
    // ...
}

if (foo) {
    // ...
}

# 规则详情

此规则不允许不必要的布尔类型转换。

此规则的错误代码示例:

/*eslint no-extra-boolean-cast: "error"*/

var foo = !!!bar;

var foo = !!bar ? baz : bat;

var foo = Boolean(!!bar);

var foo = new Boolean(!!bar);

if (!!foo) {
    // ...
}

if (Boolean(foo)) {
    // ...
}

while (!!foo) {
    // ...
}

do {
    // ...
} while (Boolean(foo));

for (; !!foo; ) {
    // ...
}

此规则的正确代码示例:

/*eslint no-extra-boolean-cast: "error"*/

var foo = !!bar;
var foo = Boolean(bar);

function foo() {
    return !!bar;
}

var foo = bar ? !!baz : !!bat;

# 选项

此规则有一个对象选项:

  • "enforceForLogicalOperands" 设置为 true 时,除了检查默认上下文外,还会检查额外的布尔转换是否包含在逻辑表达式中。默认值为 false,这意味着默认情况下此规则不会警告逻辑表达式中的额外布尔值。

# enforceForLogicalOperands

此规则的错误代码示例,其中 "enforceForLogicalOperands" 选项设置为 true

/*eslint no-extra-boolean-cast: ["error", {"enforceForLogicalOperands": true}]*/

if (!!foo || bar) {
    //...
}

while (!!foo && bar) {
    //...
}

if ((!!foo || bar) && baz) {
    //...
}

foo && Boolean(bar) ? baz : bat

var foo = new Boolean(!!bar || baz)

此规则的正确代码示例,其中 "enforceForLogicalOperands" 选项设置为 true

/*eslint no-extra-boolean-cast: ["error", {"enforceForLogicalOperands": true}]*/

if (foo || bar) {
    //...
}

while (foo && bar) {
    //...
}

if ((foo || bar) && baz) {
    //...
}

foo && bar ? baz : bat

var foo = new Boolean(bar || baz)

var foo = !!bar || baz;
Last Updated: 5/13/2023, 8:55:38 PM