読者です 読者をやめる 読者になる 読者になる

&& 演算子と || 演算子

問題
2 3 7 7を組み合わせて10を作れ。
回答
javascript:alert(!2||3+7||7)

JavaScriptの変わった性質。&& || 演算子の判定自体はBoolean型で行われるが、その式全体の値は最後に評価された値になる。
ここでC系の言語ではふつう、&& 演算子はfalseとなる式があった時点で、|| 演算子はtrueとなる式があった時点で評価を止める。それ以上計算しても無意味だからだ。
いまの例では || 演算子でつながれているので、Booleanに変換して true となる値が出てくるまで計算する。

  1. 第1項目 !2 → !true → false なので次の項を見る
  2. 第2項目 3+7 → 10 → true なのでこの時点で評価は終了

最後の項の 7 は見ない。そして最後に評価された 3+7 (=10) がこの式全体の値となる。


この性質を使って、次のような等価なコードが書けることは有名。

function bark(name, cry) {
    if (!name) name = "ポチ";
    if (!cry) cry = "わんわん!";
    alert(name + ": " + cry);
}
function bark(name, cry) {
    name = name || "ポチ";
    cry = cry || "わんわん!";
    alert(name + ": " + cry);
}

もう少し実用的な例では iframe 内のDOMにアクセスするときのクロスブラウザコードなどがある。

var iframe = document.getElementById("hoge");
var d = iframe.contentDocument || iframe.contentWindow.document;
// 前者がモダンブラウザ、後者がIE