Boolean は真偽値を表し、コンピュータプログラムでは非常に重要な型です。
Boolean は true = 真 と false = 偽 のどちらかの値のみをとります。
コンピュータは、プログラミングで動いていますが、つきつめるところ、電気が流れた状態と電気が流れない状態の2つの値を組み合わせて数値を表したり、条件を判断させたりして動作が変わるようになっています。
この電気が流れていない状態を 0 、電気が流れている状態を 1 で表現して、0と1とでコンピュータは成り立っている、という表現がされます。
これをプログラミング上で扱うと、Boolean型の true は 1 で、false は 0 として表現するとわかりやすいかもしれません。
if と組み合わせる
Boolean型と組み合わせてプログラムで使われるのが、if文です。
簡単なサンプルを示します。
1 2 3 4 5 6 7 8 9 |
var value1 = true; if (value1) { console.log('ここは実行される'); } var value2 = false; if (value2) { console.log('ここは実行されない'); } |
if は、かっこ内部の値が true の場合のみ ブロック内のソースコードを動作させる機能があります。
なので、変数に true が入るか false が入るか、によって、プログラムの動きを変えることができます。
※if (!value1) という not の表現や、else の記述については、また別の所で書きます。
変数の値が Boolean なのかどうかを判定する
typeof を使って、変数の型を判定することができますので、それを使って isBoolean 関数を書いて、変数が Boolean型 なのかどうなのか、を判定することができます。
サンプルを動かしてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
const isBoolean = function(value) { return (typeof value === 'boolean'); }; var value1 = true; console.log(isBoolean(value1)); // true と表示される var value1 = false; console.log(isBoolean(value1)); // true と表示される var value1 = 10; console.log(isBoolean(value1)); // false と表示される var value1 = 0; console.log(isBoolean(value1)); // false と表示される var value1 = 'abc'; console.log(isBoolean(value1)); // false と表示される var value1 = ''; console.log(isBoolean(value1)); // false と表示される var value1 = null; console.log(isBoolean(value1)); // false と表示される var value1 = undefined; console.log(isBoolean(value1)); // false と表示される |
数値や文字列やnull undefined などは、Booleanではないと見分けることができ、true と false は Boolean 型とわかります。
JavaScript で特に気をつけなければいけない、false属性、falsy
Boolean型の変数と、if文については、ほとんどすべてのプログラミング言語が同じような動作をするので、他言語になじみのある人には非常に簡単な話です。
JavaScript では、特別に気をつけなければいけない点があり、それを紹介します。
JavaScript は、変数に型を指定できない、動的型付け言語になるので、ある変数にBoolean型だけではなく、他の値を入れることができます。そして「if (値)」として条件を判断できるということです。
なんらかの値が、true属性をもつのか、false属性をもつのか、が大事なポイントです。
サンプルを見てみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
var value1 = 1; if (value1) { console.log('ここは実行される'); // 1 は true とみなされる } var value1 = 0; if (value1) { console.log('ここは実行されない'); // 0 は false とみなされる } var value1 = 'abc'; if (value1) { console.log('ここは実行される'); // 文字列は true とみなされる } var value1 = ''; if (value1) { console.log('ここは実行されない'); // 空文字は false とみなされる } var value1 = {}; // オブジェクト if (value1) { console.log('ここは実行される'); // オブジェクトは true とみなされる } // 中身の有無にかかわらない var value1 = []; // 配列 if (value1) { console.log('ここは実行される'); // 配列は true とみなされる } // 中身の有無にかかわらない var value1 = null; if (value1) { console.log('ここは実行されない'); // null は false とみなされる } var value1 = undefined; if (value1) { console.log('ここは実行されない'); // undefined は false とみなされる } // 実行結果 // ここは実行される // ここは実行される // ここは実行される // ここは実行される |
このサンプルの動きのように、true とみなされる値と、false とみなされる値があります。
このような動作のことを、true属性=truthy、false属性=falsy と呼んだりします。
ほとんどの値はtrue属性を持ち、false属性をもつ値の方が少ないので、列挙しておきます。
- false: Boolean型のfalse。これはfalse属性を持つ。当たり前の話。
- undefined: 定義されていないことを示す値。
- null: 何も入っていないことを示す値。
- 0: 数値のゼロ。(文字列のゼロではない)
- NaN: 数値ではないことを示すための数値(ほとんど使わない)
- '': シングルクォーテーション2文字で表される空文字。
これらの値は、if で判定する場合、false とみなされます。これ以外の値は、すべて true属性を持つ、ということになります。
このことを知っておくと、ソースコードが読めるようになり、知っておかないと、ある場所にある if の判定が何を意味しているのかを読み取れないということになります。
JavaScript のちょっとした罠の一つです。気をつけておきましょう。
まとめ
Boolean型について、次の内容を学びました。
- Boolean は true と false
- if と組み合わせて処理をわけることができる。
- isBoolean を作って使えば判定することができる。
- false属性を持つ値がある。null値やundefined値や空文字など。
Boolean については、上記のポイントをおさえておきましょう。
if の使い方や、比較演算子の「==」と「===」や、ビット演算子の「&&(アンド)」や「||(オア)」については、また別記事で扱います。