1

I originally had a route in node.js that stated this:

If the req.url === something or something or something or something, do this, else, do that.

The problem is that the else statement never got executed even though the if condition was not met. Only the if statement executes no matter what

I have broken down my route to bare minimum trying to figure out the problem. I simplified it to this:

app.get('/test', function(req,res) {

        var category = 'stupid3';

        if(category === 'stupid' || 'stupid2') {

            res.end('yup');

        } else {

            res.end('nope');

        }

});

What am I doing wrong?

Why wont the else statement execute?

Wee Wee
  • 197
  • 1
  • 4
  • 12
  • 1
    [javascript - Check variable equality against a list of values - Stack Overflow](https://stackoverflow.com/questions/4728144/check-variable-equality-against-a-list-of-values) – user202729 Jul 30 '18 at 06:58
  • You could get rid of the problem entirely by using `["stupid", "stupid2"].includes(category)` as the condition (see [this answer](https://stackoverflow.com/a/40910577/5513988)). – bb216b3acfd8f72cbc8f899d4d6963 Jul 05 '19 at 19:19

2 Answers2

11

You're using it incorrectly.

category === 'stupid' || category === 'stupid2'

Your version is effectively...

 (category === 'stupid') || 'stupid2'

...so because a non-empty string is "truthy", the RHS will always cause the || to pass.

  • 3
    The lesson here is to make sure you know javascript before you start jumping into node.js #embarrassed – Wee Wee Oct 12 '15 at 20:57
1

the else statement is never executed because your if condition always returns true..

if (category === 'stupid' || 'stupid2') {

the second part of the condition i.e. after the || operator is 'stupid2 which is a truthy value

dpkg
  • 181
  • 9