Javascriptの||、&&

&&と||は論理演算子として多くの言語で「AND」「OR」と同じように使われます。
以前javascriptのboolean値についてで述べたようにJavascriptのboolean型は少し特殊で、&&と||は必ずしもbooleanを返すわけではないとのことです。
リファレンスによると、expr1 && expr2は

expr1 を false と見ることができる場合は、expr1 を返します。そうでない場合は、expr2 を返します。したがって、真偽値と共に使われた場合、 演算対象の両方が true ならば、&& は、true を返し、そうでなければ、false を返します。

expr1 || expr2は、

expr1 を true と見ることができる場合は、expr1 を返します。そうでない場合は、expr2 を返します。したがって、真偽値と共に使われた場合、 演算対象のどちらかが true ならば、|| は、true を返し、両方とも false の場合は、false を返します。

var zero = 0; //falseと見ることもできる
var one = 1; //trueと見ることもできる
var two = 2; //同様にtrue

var a = zero && one; //0
var b = one  && zero;//0
var c = one  && two; //2
var d = two  && one; //1

var e = zero || one; //1
var f = one  || zero;//1
var g = one  || two; //1
var h = two  || one: //2

var i = zero && zero;//0
var j = zero || zero;//0

参考:
MDN Web docs
JavaScriptの「&&」「||」について盛大に勘違いをしていた件