JavaScript

論理値

 論理値は、真か偽か、オンかオフか、はいかいいえか、などの値を表すものです。論理値型が取りうる値は 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;

 このコードは、まず、a4 に等しいかどうかを調べます。等しい場合は、b1 を加えます。等しくない場合は、a1 を加えます。

 後ほど「型の変換」で説明するように、JavaScript の値は全て論理値に変換できます。以下に挙げる値は false に変換されますので、false と記述したのと同じ動作をします。

undefined
null
0
-0
NaN
"" // 空文字列。

 このほかの値は、すべてのオブジェクト(配列)も含めて true に変換され、true と記述したのと同じことになります。まとめると、JavaScript が論理値を必要とする場面で、false に変換される値は、false と同じ意味になります。また、true に変換される値は、true と同じ意味になります。

 例を示します。変数 o にはあるオブジェクトか null 値が格納されているとします。o が null でないことは、if文を使って次のように明示的にテスト出来ます。

if (o !== null) ...

 非同値演算子( !== )は、onull を比較して、true または false に評価します。しかし、nullfalse に変換され、オブジェクトは true に変換されるという規則を使えば、次のように比較を省略できます。

if (o) ...

 最初に書いた文では、if 文の本体は、onull 以外の場合にのみ実行されます。これに対して、先ほどの文は、少し条件が緩くなります。ofalse ではないか、false に変換されるような値( nullundefined など)ではない場合に、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 以外の場合。
}