# Source: https://github.com/quick-lint/quick-lint-js/blob/master/docs/errors/E0190.md

# E0190: missing comparison; '===' does not extend to the right side of '||'

In English, we might say “if the selection is ‘agree’ or ‘strongly agree’,
return a rating of 1”. If this English phrase is translated naïvely into
JavaScript, the code will behave as if every selection has a rating of 1:

```javascript
function getRating(radioElement) {
  let selection = radioElement.value;
  if (selection === "agree" || "strongly agree") {
    return 1;
  } else if (selection === "disagree") {
    return 0;
  } else if (selection === "strongly disagree") {
    return -1;
  }
}
```

This happens because `if (selection === "agree" || "strongly agree")` is
interpreted as `if ((selection === "agree") || "strongly agree")`, i.e. “if
selection is ‘agree’, or if ‘strongly agree’ is truthy, then …”. Because the
string `"strongly agree"` is not empty, it is truthy, and the condition is
always true.

To fix this error, write the `==` or `===` comparison on both sides of `||`:

```javascript
function getRating(radioElement) {
  let selection = radioElement.value;
  if (selection === "agree" ||
      selection === "strongly agree") {
    return 1;
  } else if (selection === "disagree") {
    return 0;
  } else if (selection === "strongly disagree") {
    return -1;
  }
}
```

Note: As of quick-lint-js version 2.11.0, this diagnostic treats `undefined` as
a constant. If you declare your own variable named `undefined`, `E0190` might be
incorrectly reported. To work around this issue, rename your variable to
something other than `undefined`, such as `isUndefined`.

Introduced in quick-lint-js version 2.0.0.