# no-unsafe-negation
Deny the use of !
on the left hand side of an instanceof
or in
expression where it is ambiguous.
JavaScript precedence is higher for logical not than it is for in or instanceof. Oftentimes you see
expressions such as !foo instanceof bar
, which most of the times produces unexpected behavior.
precedence will group the expressions like (!foo) instanceof bar
. Most of the times the developer expects
the expression to check if foo
is not an instance of bar
however.
# Incorrect Code Examples
if (!foo instanceof String) {
}
if (!bar in {}) {
}
More incorrect examples
!foo in bar
![5] instanceof !4
More correct examples
If this is intended behavior, you can wrap the expression
(!foo) instanceof bar
key in bar
bar instanceof bar