var a = 3;
var b = "JavaScript";
var c = "";
var d = 0;
x = ( a > 1 || a < 5) // 左辺式を評価するとtrue、右辺式は評価しないで左辺式の評価結果<true>を返す
alert(
a > 1 || a < 5) ・・・→
x = ( a > 5 || a == 3 ) // 左辺式を評価するとfalse、なので右辺式の評価結果<true>を返す
alert(a > 5 || a ==
3) ・・・→
x = ( a > 5 || 3 ) // 左辺式を評価するとfalse、なので右辺式の評価結果<3>を返す
alert(a > 5 || 3) ・・・→
alert(a > 5 || a + 3) ・・・→
x = ( a || a < 5 ) // 左辺式を評価しBoolean値に変換するとtrue、なので左辺式の評価結果<3>を返す
alert(a || a < 5) ・・・→
alert(a + 2 || a < 5) ・・・→
x = ( b || b ==3 ) // 左辺式を評価しBoolean値に変換するとtrue、なので左辺式の評価結果<JavaScrip>を返す
alert(b || b == 3) ・・・→
alert(b == a || b) ・・・→
x = ( c || b + a ) // 左辺式を評価しBoolean値に変換するとfalse、右辺式の評価結果<JavaScrip3>を返す
alert(c || b + a) ・・・→
alert(c || "こんにちは!" + b) ・・・→
x = ( c || d ) // 左辺式を評価しBoolean値に変換するとfalse、右辺式の評価結果<0>を返す
(d は数値の 0 でboolean変換するとfalseだが、この場合変換しないで評価結果そのまま)
alert(c || d ) ・・・→
alert(c || d + a) ・・・→
x = ( d || c ) // 左辺式を評価しBoolean値に変換するとfalse、右辺式の評価結果の空文字のままを返す
(c は空文字 でboolean変換するとfalseだが、この場合変換しないで評価結果そのまま)
alert(d || c ) ・・・→
alert(d || c + d) ・・・→
(右辺の評価結果が返る)
x = ( document.getElementById("samp") || b ) // 左辺式を評価し、このページ内に
id="samp" を持つHTML要素が
存在する。Boolean値に変換するとtrueなので、左辺式の評価結果を返す
alert(document.getElementById("samp") || b )・・・→
alert(document.getElementById("xyz") || b) ・・・→
(このページ内には id="xyz" をもつHTML要素は存在しない。falseに変換され、右辺式の評価結果が返される)
■(今現在の、私流の解釈 ・・・・変わるかも (●^o^●)
上は x = の代入式の例です。この場合、booleanへの変換値でなく評価結果が返される(true/falseも含め)。
しかし、〜または 〜(||)演算子は if(a || b) のような条件式でよく使われる。この場合は、左辺も右辺もboolean変換された値が返される。そうでなければ条件判断できないのではないでしょうか?。だからよく使われる「左辺または右辺のどちらかがtrueであればtrueを、それ以外はfalseを返す」という説明でよい。