This is a pretty classic question that gets tossed around relatively frequently.
The main purpose of utilizing something like x = x || 0 is to ensure that x will have a false value Boolean, as you've described, but rather than having null or false, you are returning 0.
The reasoning behind using the above rather than say, x = x || false is that you will end up returning 0 (much easier to manipulate integer or float based data) rather than the other values.
Everything you've suggested is relatively true. For example:
var x = x || false; // False
var y = x || 0; // 0
var z = x || null; // Null
alert(x);
alert(y);
alert(z);
If you had a purpose to use a true or false value, your suggestion would be perfectly adequate.