Why does document.writeln("a" || "b") print "a" instead of "true"?

|| and && don't always return booleans. || evaluates the first argument. If it would evaluate to true, it returns that argument. Otherwise, it returns the second argument (unconditionally).

&& evaluates the first argument. If it would evaluate to true, it returns the second argument (unconditionally). Otherwise it returns the first argument.

This allows you to do some neat things like:

function foo(optionalVar) {
    var x = optionalVar || 4; 
}
foo(10); //uses 10, since it is passed in;
foo(); //uses 4, the default value, since optionalVar=undefined, which is false

Its order of operations and truth tables.

If(a OR b) : if a is true than the whole statement is true
If(a AND b): if a is true, doesnt mean that the statement is true, 
             but if b is true as well than the statement is true
|| is the same as OR
&& is the same as AND

UPDATE
So in functional programming it returns the 1st true value. a string is considered true therefore it would return the string.

Pointy pointed out:
The empty string, it should be noted, is not true. (Which is to say, of course, that it's false)

Tags:

Javascript