Mixing up the order of operations will almost always yield unexpected results. For instance, consider the outcome of absentmindedly kissing the dog and patting your spouse on the head.
Similarly, mis-applied negation will also yield bad results. For instance consider the difference between \!key in dict and
\!(key in dict). The first looks for a boolean value (!key) in dict, and the other looks for a string and
inverts the result. \!obj instanceof SomeClass has the same problem.
This rule raises an issue when the left operand of an in or instanceof operator is negated.
if (!"prop" in myObj) { // Noncompliant; "in" operator is checking property "false"
doTheThing(); // this block will be never executed
}
if (!foo instanceof MyClass) { // Noncompliant; "!foo" returns a boolean, which is not an instance of anything
doTheOtherThing(); // this block is never executed
}
if (!("prop" in myObj)) {
doTheThing();
}
if (!(foo instanceof MyClass)) {
doTheOtherThing();
}