no-extra-boolean-cast
Disallow unnecessary boolean casts
The "extends": "eslint:recommended" property in a configuration file enables this rule
Some problems reported by this rule are automatically fixable by the --fix command line option
In contexts such as an if statement’s test where the result of the expression will already be coerced to a Boolean, casting to a Boolean via double negation (!!) or a Boolean call is unnecessary. For example, these if statements are equivalent:
if (!!foo) {
// ...
}
if (Boolean(foo)) {
// ...
}
if (foo) {
// ...
}
Rule Details
This rule disallows unnecessary boolean casts.
Examples of incorrect code for this rule:
/*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; ) {
// ...
}
Examples of correct code for this rule:
/*eslint no-extra-boolean-cast: "error"*/
var foo = !!bar;
var foo = Boolean(bar);
function qux() {
return !!bar;
}
var foo = bar ? !!baz : !!bat;
Options
This rule has an object option:
"enforceForLogicalOperands"when set totrue, in addition to checking default contexts, checks whether the extra boolean cast is contained within a logical expression. Default isfalse, meaning that this rule by default does not warn about extra booleans cast inside logical expression.
enforceForLogicalOperands
Examples of incorrect code for this rule with "enforceForLogicalOperands" option set to 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)
Examples of correct code for this rule with "enforceForLogicalOperands" option set to 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;
Version
This rule was introduced in ESLint v0.4.0.