論理値は、真か偽か、オンかオフか、はいかいいえか、などの値を表すものです。論理値型が取りうる値は 2つしかありません。これらは true と false という予約語で表現します。
JavaScript プログラムで論理値がよく使われるのは、比較の返す値としてです。
a == 4
この式は、変数 a の値が数値 4
に等しいかどうかを調べます。等しい場合、論理値は true
になります。等しくない場合、論理値は false
になります。
論理値は、JavaScript の制御構造で使うのが一般的です。例えば、JavaScript の if/else 文で、論理値が true のときにある操作を実行し、論理値が false のときに別の操作を実行することができます。論理値を生成する比較式を直接条件文に記述しても構いません。
if (a == 4)
b = b + 1;
else
a = a + 1;
このコードは、まず、a が 4
に等しいかどうかを調べます。等しい場合は、b に 1
を加えます。等しくない場合は、a に 1
を加えます。
後ほど「型の変換」で説明するように、JavaScript の値は全て論理値に変換できます。以下に挙げる値は false
に変換されますので、false
と記述したのと同じ動作をします。
undefined
null
0
-0
NaN
"" // 空文字列。
このほかの値は、すべてのオブジェクト(配列)も含めて true
に変換され、true
と記述したのと同じことになります。まとめると、JavaScript が論理値を必要とする場面で、false
に変換される値は、false
と同じ意味になります。また、true
に変換される値は、true
と同じ意味になります。
例を示します。変数 o にはあるオブジェクトか null 値が格納されているとします。o が null でないことは、if文を使って次のように明示的にテスト出来ます。
if (o !== null) ...
非同値演算子( !== )は、o と null
を比較して、true
または false
に評価します。しかし、null
は false
に変換され、オブジェクトは true
に変換されるという規則を使えば、次のように比較を省略できます。
if (o) ...
最初に書いた文では、if 文の本体は、o が null
以外の場合にのみ実行されます。これに対して、先ほどの文は、少し条件が緩くなります。o が false
ではないか、false
に変換されるような値( null
や undefined
など)ではない場合に、if 文の本体が実行されます。どちらの if 文が適切かは、o に代入されることになる値によります。null 値であるかどうかを、0 や "" であるかどうかと区別する必要があれば、明示的に比較を行うようにしてください。
論理値には、toString()
メソッドがあります。このメソッドを使えば、論理値を文字列("true"、"false")に変換できます。この他には、あまり便利なメソッドはありません。ただし、重要な論理演算子が 3つ用意されています。
&& 演算子は、論理 AND 演算を行います。両方のオペランドが true
に変換される値の場合にのみ、true
と評価します。それ以外は false
と評価します。||演算子は、論理 OR 演算を行います。どちらかのオペランドが true
に変換される値であれば、true
と評価します。両方のオペランドが false
に変換される値であれば、false
と評価します。3つ目の演算子は、単項 ! 演算子です。! 演算子は論理 NOT 演算を行います。オペランドが false
に変換される値であれば、true
と評価します。逆に、オペランドが true
に変換される値であれば、false
と評価します。
if ((x == 0 && y == 0) || !(z == 0)) {
// x と y の両者が 0 で、z が 0 以外の場合。
}