Bitwise operators should not be used where logical operators are expected
- BAD_BITWISE_OPERATOR
- Error
- High, Medium
- cwe
This rule applies when bitwise operators are used where logical operators are expected.
Bitwise operators have different results from logical operators and a TypeError exception may be thrown because short-circuit evaluation is not applied. (In short-circuit evaluation, right operand evaluation is skipped according to left operand value, e.g. x is false in x && y.)
It is obvious that logical operators are expected in the following code patterns:
e && e.xe || {}e || ''
Noncompliant Code Example
View with compliant examples side by side// Example 1
if (obj & obj.prop) { // BAD_BITWISE_OPERATOR alarm
console.log(obj.prop);
}
// Example 2
options = options | {}; // BAD_BITWISE_OPERATOR alarm
// Example 3
input |= ''; // BAD_BITWISE_OPERATOR alarmCompliant Code Example
View with noncompliant examples side by side// Example 1
if (obj && obj.prop) {
console.log(obj.prop);
}
// Example 2
options = options || {};
// Example 3
input = input || '';Version
This rule was introduced in DeepScan 1.0.0-alpha.