Question: What's the difference between `|` and `||` in Javascript?

Furthermore, what's the difference between `&` and `&&`?

Answer: 
`|` is a bitwise or, `||` is a logical or. 

A bitwise or takes the two numbers and compares them on a bit-by-bit basis, producing a new integer which combines the 1 bits from both inputs. So `0101 | 1010` would produce `1111`. 

A logical or `||` checks for the "truthiness" of a value (depends on the type, for integers 0 is false and non-zero is true). It evaluates the statement left to right, and returns the first value which is truthy. So `0101 || 1010` would return `0101` which is truthy, therefore the whole statement is said to be true.

The same type of logic applies for `&` vs `&&`. `0101 & 1010` = `0000`. However `0101 && 1010` evaluates to `1010` (`&&` returns the last truthy value so long as both operands are truthy).
* `&` is [the bitwise AND operator](http://rx4ajax-jscore.com/resource/glossary/glossb.html#bitwise_and_operator)
* `|` is [the bitwise OR operator](http://rx4ajax-jscore.com/resource/glossary/glossb.html#bitwise_or_operator)
* `&&` is [the logical AND operator](http://www.devguru.com/technologies/ecmascript/quickref/logical_operators.html)
* `||` is [the logical OR operator](http://www.devguru.com/technologies/ecmascript/quickref/logical_operators.html)

The difference is that logical operators only consider each input at face value, treating them as whole, while [bitwise operators work at the bit level](http://en.wikipedia.org/wiki/Bitwise_operation):

```
var thetruth = false;
var therest = true;

var theuniverse = thetruth && therest; //false
var theparallel = thetruth && thetruth; //true

var theindifferent = thetruth || therest; //true
var theideal = thetruth || thetruth; // false

var thematrix = 5346908590;
var mrsmith = 2354656767;

var theoracle = thematrix & mrsmith; //202445230
var theone = thematrix | mrsmith; //7499120127

```