Skip to content
← Back to rules

eslint/no-unsafe-negation 正确性

This rule is turned on by default.
An auto-fix is available for this rule.

它的作用

禁止对关系运算符的左操作数进行取反,以防止因误解运算符优先级或意外使用取反而导致的逻辑错误。

该规则可在 TypeScript 代码中禁用,因为 TypeScript 编译器会强制执行此检查。

为什么这是个问题?

对关系运算符的左操作数进行取反可能导致意外的行为,这是由于运算符优先级导致的,从而引发逻辑错误。例如,!a in b 可能被解释为 (!a) in b 而不是 !(a in b),而这并非预期的逻辑。

示例

此规则的 错误 代码示例:

javascript
if (!key in object) {}

if (!obj instanceof Ctor) {}

此规则的 正确 代码示例:

javascript
if (!(key in object)) {}

if (!(obj instanceof Ctor)) {}

配置

此规则接受一个配置对象,包含以下属性:

enforceForOrderingRelations

type: boolean

default: false

enforceForOrderingRelations 选项决定是否允许对顺序关系运算符(<、>、<=、>=)左侧的表达式进行取反。

其目的是避免出现如 !a < b 这类表达式(等价于 (a ? 0 : 1) < b),而实际意图应为 !(a < b)

如何使用

要通过配置文件或 CLI 启用 此规则,可以使用:

json
{
  "rules": {
    "no-unsafe-negation": "error"
  }
}
bash
oxlint --deny no-unsafe-negation

参考资料