Skip to content
← Back to rules

eslint/no-constant-binary-expression 正しさ

This rule is turned on by default.

何をしますか

演算が値に影響しない式を禁止します

なぜ問題ですか

常に真または偽に評価される比較や、常に短絡するか、決して短絡しない論理式(||&&??)は、プログラマーの誤りの兆候である可能性が高いです。

これらの誤りは、演算子の優先順位を誤って判断しやすい複雑な式で特に見られます。

さらに、このルールは新しく作成されたオブジェクト/配列/関数などとの比較を検出します。 JavaScriptではオブジェクトは参照によって比較されるため、新しく作成されたオブジェクトは他のいかなる値とも === になり得ません。 これは、値によってオブジェクトが比較される言語から来たプログラマーにとっては意外に感じられるかもしれません。

このルールに対して不適切なコードの例:

javascript
// これだと `a + (b ?? c)` と期待するかもしれないが、実際は `(a + b) ?? c` となる:
const x = a + b ?? c;

// しかし、実際に評価されるのは `(a + b) ?? c`。`a + b` は決して `null` にならないため、`?? c` は効果がない。

// 値によってオブジェクトが比較される言語からのプログラマーなら、次のように期待するかもしれない:
const isEmpty = x === [];

// ただし、これは常に `isEmpty` が `false` になる。

このルールに対して適切なコードの例:

javascript
const x = a + (b ?? c);

const isEmpty = x.length === 0;

使い方

設定ファイルまたは CLI でこのルールを有効化するには、以下のように使用できます:

json
{
  "rules": {
    "no-constant-binary-expression": "error"
  }
}
bash
oxlint --deny no-constant-binary-expression

参照