Boolean
Boolean
オブジェクトは論理値(true
または false
)を表します。
解説
論理値プリミティブと Boolean オブジェクト
プリミティブの論理値である true
や false
を、 true
や false
の値を持った Boolean
オブジェクトと混同しないでください。
Boolean
オブジェクトの値が false
である場合も含めて、オブジェクトは条件文に渡されると すべて true
と評価されます。例えば、以下の if
文の条件は true
と評価されます。
const x = new Boolean(false);
if (x) {
// このコードは実行されます。
}
この振る舞いは論理値プリミティブには適用されません。例えば、以下の if
文の条件は false
に評価されます。
const x = false;
if (x) {
// このコードは実行されません
}
オブジェクトを論理値でない値から論理値へ変換するために new
を使って Boolean()
コンストラクターを使わないでください。代わりに、 Boolean()
を関数として使ったり、二重否定を使用したりすることで同じことが行えます。
const good = Boolean(expression); // これか、もしくは…
const good2 = !!expression; // …これを使ってください
const bad = new Boolean(expression); // これは使わないこと!!
Boolean
オブジェクトの初期値として何らかのオブジェクトを指定した場合、それが値 false
を持つ Boolean
オブジェクトであっても、新しい Boolean
オブジェクトは値 true
を持ちます。
const myFalse = new Boolean(false); // Booleanオブジェクト: false
const g = Boolean(myFalse); // true
const myString = new String("Hello"); // Stringオブジェクト
const s = Boolean(myString); // true
警告: コンストラクターとして Boolean
を使うことは滅多にありません。
論理値への型強制
論理値を期待する多くの組み込み演算は、まず引数を論理値に型強制 (Type coercion)します。この変換は次のように要約されます。
- 論理値(boolean)はそのまま返されます。
undefined
はfalse
に変換されます。null
はfalse
に変換されます。0
,-0
,NaN
はfalse
に、それ以外の数値はtrue
に変換されます。0n
はfalse
に、その他のBigInt
はtrue
に変換されます。Symbol
はtrue
になります。- すべてのオブジェクトは
true
になります。
メモ: 非推奨のプロパティ document.all
はオブジェクトであるにもかかわらず、論理値に変換されると false
になります。このプロパティはレガシーで非標準であるため、使用しないでください。
注意: 文字列への型強制や数値への型強制などの他の型の変換とは異なり、論理値への型強制はオブジェクトからプリミティブに変換しようとするわけではありません。
言い換えれば、false
に強制される値はほんの一握りで、これらは falsy (偽値) と呼ばれる値です。それ以外の値は truthy (真値) と呼ばれます。値が truthy (真値)であるかどうかは、論理演算子や条件文と共に使われるとき、あるいはあらゆる真偽値の文脈で使われるときに重要です。
JavaScriptで型強制と同じ効果を得るには、2つの方法があります。
- 二重否定:
!!x
はx
を 2 回否定し、上記と同じアルゴリズムでx
を論理値に変換します。 Boolean()
関数、つまりBoolean(x)
は上記と同じアルゴリズムを用いてx
を論理値に変換します。
なお、truthy / falsy であることは、論理値プリミティブ true
や false
と 緩く等しい (==) こととは異なることに注意してください。
if ([]) {
console.log("[] is truthy");
}
if ([] == false) {
console.log("[] == false");
}
// [] is truthy
// [] == false
[]
は truthy ですが、false
と緩く等しいです。すべてのオブジェクトは truthy であるため、[]
も truthy です。しかし、プリミティブである false
と比較する場合、 []
も Array.prototype.toString()
によって ""
というプリミティブに変換されます。文字列と論理値を比較すると、どちらも数値に変換され、どちらも 0
になるので、[] == false
は true
となります。一般に、falsy であることと == false
は次のようなケースで異なります。
NaN
,undefined
,null
は falsy ですが、false
と緩く異なります。"0"
(および""
ではないが 0 に型強制される 他の文字列リテラル)は truthy ですが、false
と緩く等しいです。- オブジェクトは常に truthy ですが、そのプリミティブ表現は
false
と緩く等しくなる可能性があります。
truthy な値が true
と緩く等しくなる可能性はさらに低いです。すべての値は truthy か falsy のどちらかですが、ほとんどの値は true
と false
のどちらとも緩く異なります。
コンストラクター
Boolean()
-
新しい
Boolean
オブジェクトを生成します。
インスタンスメソッド
Boolean.prototype.toString()
-
このオブジェクトの値に応じて、文字列で
true
またはfalse
のどちらかを返します。Object.prototype.toString()
メソッドを上書きします。 Boolean.prototype.valueOf()
-
Boolean
オブジェクトのプリミティブ値を返します。Object.prototype.valueOf()
メソッドを上書きします。
例
Boolean オブジェクトを初期値 false で生成
const bNoParam = new Boolean();
const bZero = new Boolean(0);
const bNull = new Boolean(null);
const bEmptyString = new Boolean("");
const bfalse = new Boolean(false);
Boolean オブジェクトを初期値 true で生成
const btrue = new Boolean(true);
const btrueString = new Boolean("true");
const bfalseString = new Boolean("false");
const bSuLin = new Boolean("Su Lin");
const bArrayProto = new Boolean([]);
const bObjProto = new Boolean({});
仕様書
Specification |
---|
ECMAScript Language Specification # sec-boolean-objects |
ブラウザーの互換性
BCD tables only load in the browser