It seems that:
if (typeof a == \'undefined\') {
a = 0;
}
and
(typeof a != \'undefined\') || (a = 0)
h
Stylistically, setting default values like a || a=default is a common idiom on entry into a function, because javascript doesn't enforce the number of arguments.
Readability will be compromised if this construct is used in other circumstances, where you really mean if/else.
Performance used to vary between the different styles, but in a quick test today if/else and logical operators were the same speed, but ternary operation was slower.