論理積とは
演算子でいうと、
&&
こいつです。
var case1 = true && true, // => true case2 = true && false, // => false case3 = false && false; // => false
基本的にはこんな感じで使われます。
&&でつながっている部分がすべてtrueならtrueが、
1つでもfalseならfalseが返ってきます。
false を 0、true を 1 としたときの積の値と同等になるため、論理積と呼ばれています。
var case1 = 1 * 1, // => 1 case2 = 1 * 0, // => 0 case3 = 0 * 0; // => 0
値が複数あってもルールは変わりません。
var case4 = true && true && true && true && true && true, // => true case5 = false && true && true && true && true && true, // => true case6 = true && true && true && true && false && true; // => false
そう。これは全員揃っていないと発車しない修学旅行のバスみたいなものです。
1人でもいない生徒(false)がいるとバスは出発しないのです。
論理積で真偽値以外の値を評価する
前回 if文の条件に真偽値以外の値を入れてみましたが、
論理積も真偽値以外の値を評価することができます。
var case7 = true && "( ' jjj ' )", // => "( ' jjj ' )" case8 = false && "( ' jjj ' )", // => false case9 = 0 && "( ' jjj ' )"; // => 0
という感じです。
&& で繋いだ値がすべてtruly ならば最後のtrulyの値が、
1つでもfalsyの値があれば最初に出てきたfalsyの値が返され、その後の処理は行われません。
なので、
var case10 = returnTrue() && returnFalse() && returnTrue() && returnTrue() && returnTrue(); // => false function returnTrue() { alert(true); return true; } function returnFalse() { alert(false); return false; }
というようなスクリプトを書くと、
returnFalseを実行した時点で、case10の値がfalseに決定され、その後のreturnTrueは実行されません。
この特性は、あるかどうかがわからないオブジェクトのプロパティにアクセスする際などに便利に使えます。
var hoge = obj && obj.width; // hoge には objがあればobj.width の 値が、なければ undefined がはいります。
今回は以上です。