Search code examples
javascriptlogical-operators

Does JavaScript have non-shortcircuiting boolean operators?


In JavaScript

(f1() || f2())

won't execute f2 if f1 returns true which is usually a good thing except for when it isn't. Is there a version of || that doesn't short circuit?

Something like

var or = function(f, g){var a = f(); var b = g(); return a||b;}

Solution

  • Nope, JavaScript is not like Java and the only logical operators are the short-circuited

    https://developer.mozilla.org/en/JavaScript/Reference/Operators/Logical_Operators

    Maybe this could help you:

    http://cdmckay.org/blog/2010/09/09/eager-boolean-operators-in-javascript/

    | a     | b     | a && b | a * b     | a || b | a + b     |
    |-------|-------|--------|-----------|--------|-----------|
    | false | false | false  | 0         | false  | 0         |
    | false | true  | false  | 0         | true   | 1         |
    | true  | false | false  | 0         | true   | 1         |
    | true  | true  | true   | 1         | true   | 2         |
    
    | a     | b     | a && b | !!(a * b) | a || b | !!(a + b) |
    |-------|-------|--------|-----------|--------|-----------|
    | false | false | false  | false     | false  | false     |
    | false | true  | false  | false     | true   | true      |
    | true  | false | false  | false     | true   | true      |
    | true  | true  | true   | true      | true   | true      |
    

    Basically (a && b) is short-circuiting while !!(a + b) is not and they produce the same value.