JavaScript/Boolean
Boolean オブジェクトは、真理値を表すプリミティブ boolean のラッパーオブジェクトです。
真理値
編集JavaScriptにおける真理値は、真をtrue
、偽をfalse
という2つの値で表します。0 < 1
(0は1より小さい)という比較結果はtrue
であり、0 > 1
(0は1より大きい)という比較結果はfalse
です。
console.log( 0 < 1 ); // true
console.log( 0 > 1 ); // false
論理演算子は必ずtrue
またはfalse
の真理値を返します。さらに数値や文字列、関数などあらゆるオブジェクトは、true
とfalse
のいずれかの真理値に変換することができます。true
自身の真理値はtrue
、false
自身の真理値はfalse
であると約束されています。
ほとんどのものはtrue
ですが、数値の0
(-0
) や空文字列 ""
、NaN
、null
、undefined
などはfalse
です。
Boolean
編集BooleanオブジェクトはJavaScriptのプリミティブな真理値をラップします。何らかの値をBooleanオブジェクト(真理値)に変換するには、Booleanを関数として呼び出します。このとき返す値は false または true で typeof は "boolean" です。他方、new を付けてコンストラクタとして呼び出すと返す値の typeof は "object" となりBooleanラッパーオブジェクトです。
const bool = Boolean("abc");
console.log(bool); // true
あるいは論理否定演算子!
を使用することで、値を強制的にBooleanオブジェクトに変換することができます。
const bool = !!"abc";
console.log(bool); // true
!!
の方が簡潔だという人もいれば、Boolean関数の方がわかりやすいという人もいるでしょう。
ブーリアンコンテキスト
編集if文の条件式に渡されたオブジェクトは、自動的に真理値に変換されます。このように、暗黙に真理値に変換される文脈は、ブーリアンコンテキストとよばれます。
falsy
編集ブーリアンコンテキストで false に変換される値を falsy な値と呼びます。
- falsyな値
-
- false
- false そのもの
- 0
- 数値ゼロ
- -0
- 数値マイナスゼロ
- 0n
- BigIntのゼロ
- ""
- 空文字列
- null
- null
- undefined
- undefined - プリミティブ値
- NaN
- NaN
truthy
編集ブーリアンコンテキストで true に変換される値を truthy な値と呼びます。 ブーリアンコンテキストでは true/false の2値しか取りえないので、値集合の中で falsy とは補集合の関係にあります。
ブーリアンコンテキストと暗黙の型変換
編集const ary = [undefined, null, false, true, 0, 1, "", "1", [], [2]]
const json = ary.map(x => x === undefined ? "undefined" : JSON.stringify(x))
let s = ""
s += `{| class="wikitable"
|+ ブーリアンコンテキストと暗黙の型変換
! ${json.join("!!")}
`
s += `|-
| ${ary.map(x => `${Boolean(x)}:${typeof(Boolean(x))}` ).join("||")}
`
s += `|}`
console.log(s)
undefined | null | false | true | 0 | 1 | "" | "1" | [] | [2] |
---|---|---|---|---|---|---|---|---|---|
false:boolean | false:boolean | false:boolean | true:boolean | false:boolean | true:boolean | false:boolean | true:boolean | true:boolean | true:boolean |