The "extends": "eslint:recommended"
property in a configuration file enables this rule.
The --fix
option on the command line can automatically fix some of the problems reported by this rule.
Just as developers might type -a + b
when they mean -(a + b)
for the negative of a sum, they might type !key in object
by mistake when they almost certainly mean !(key in object)
to test that a key is not in an object. !obj instanceof Ctor
is similar.
This rule disallows negating the left operand of Relational Operators.
Relational Operators are:
in
operator.instanceof
operator.Examples of incorrect code for this rule:
/*eslint no-unsafe-negation: "error"*/ if (!key in object) { // operator precedence makes it equivalent to (!key) in object // and type conversion makes it equivalent to (key ? "false" : "true") in object } if (!obj instanceof Ctor) { // operator precedence makes it equivalent to (!obj) instanceof Ctor // and it equivalent to always false since boolean values are not objects. }
Examples of correct code for this rule:
/*eslint no-unsafe-negation: "error"*/ if (!(key in object)) { // key is not in object } if (!(obj instanceof Ctor)) { // obj is not an instance of Ctor } if(("" + !key) in object) { // make operator precedence and type conversion explicit // in a rare situation when that is the intended meaning }
If you don’t want to notify unsafe logical negations, then it’s safe to disable this rule.
This rule was introduced in ESLint 3.3.0.
© JS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/rules/no-unsafe-negation