JavaScript は, あらゆる値を真偽値判定に使えます。しかし、偽になる値は限定されています。
値または型 | 真偽値 |
---|---|
undefined | 偽. |
null | 偽. |
Boolean 型 | その値どおり. true は真, false は偽.
|
Number 型 | +0, -0 および NaN は偽. その他は真.
|
String 型 | 空文字列 "" は偽. その他は真.
|
Symbol 型 | 真. |
Object 型 | 真. |
0 が偽というのは C言語っぽい。BigInt
型の 0n
も "偽" になる。
空文字列が偽になる一方で, 空配列 []
は "真" になる. 空オブジェクト {}
も真. Common Lisp では空リストも偽になるので、JavaScript はそれとは異なる流派ということになる。
true
, false
との比較真偽値の代表的な値は true
, false
です。これらと比較したらどうなるか。
文字列 "0"
は真. 空配列も同様。でも, "0" == false
もまた真になる。暗黙の型変換は意外なことが起こる。
この点でも, 比較は常に ===
を使わなければならず, ==
はもはや使ってはならない。
値 | 値 == true | 値 == false
| 値 === true | 値 === false
|
---|---|---|---|---|
undefined | false | false | false | false |
null | false | false | false | false |
false | false | true | false | true |
true | true | false | true | false |
0 | false | true | false | false |
1 | true | false | false | false |
NaN | false | false | false | false |
Infinity | false | false | false | false |
"" | false | true | false | false |
"0" | false | true | false | false |
"1" | true | false | false | false |
[] | false | true | false | false |
{} | false | false | false | false |
undefined
, null
, NaN
, ""
は, 偽にも関わらず, false
との比較ではイコールになりません。したがって、真偽値を確認するのに, true
とも false
とも比較してはいけません。
true
に, 偽値を false
に変換true
とも false
とも比較すべきでないなら、どうするか。
Boolean(
値)
を使えばよい。あるいは, !!値
でもよい。
new Boolean()
でないことに注意。プリミティブ値のクラスをnew
するのは意味がないどころか正常にうごかない。実行時エラーにならないので、注意するしかない。こういうのはエラーにしてほしい。
"TRUE"
または "FALSE"
を真偽値に変換いろんなやり方が考えられるが, JSON.parse()
を使うのはやりすぎ。
例えば, 次のような方法が考えられる。