Boolean

Boolean オブジェクトは論理値(true または false)を表します。

解説

論理値プリミティブと Boolean オブジェクト

プリミティブの論理値である truefalse を、 truefalse の値を持った Boolean オブジェクトと混同しないでください。

Boolean オブジェクトの値が false である場合も含めて、オブジェクトは条件文に渡されると すべて true と評価されます。例えば、以下の if 文の条件は true と評価されます。

js
const x = new Boolean(false);
if (x) {
  // このコードは実行されます。
}

この振る舞いは論理値プリミティブには適用されません。例えば、以下の if 文の条件は false に評価されます。

js
const x = false;
if (x) {
  // このコードは実行されません
}

オブジェクトを論理値でない値から論理値へ変換するために new を使って Boolean() コンストラクターを使わないでください。代わりに、 Boolean() を関数として使ったり、二重否定を使用したりすることで同じことが行えます。

js
const good = Boolean(expression); // これか、もしくは…
const good2 = !!expression; //  …これを使ってください
const bad = new Boolean(expression); // これは使わないこと!!

Boolean オブジェクトの初期値として何らかのオブジェクトを指定した場合、それが値 false を持つ Boolean オブジェクトであっても、新しい Boolean オブジェクトは値 true を持ちます。

js
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)はそのまま返されます。
  • undefinedfalse に変換されます。
  • nullfalse に変換されます。
  • 0, -0, NaNfalse に、それ以外の数値は true に変換されます。
  • 0nfalse に、その他の BigInttrue に変換されます。
  • Symboltrue になります。
  • すべてのオブジェクトは true になります。

メモ: 非推奨のプロパティ document.all はオブジェクトであるにもかかわらず、論理値に変換されると false になります。このプロパティはレガシーで非標準であるため、使用しないでください。

注意: 文字列への型強制数値への型強制などの他の型の変換とは異なり、論理値への型強制はオブジェクトからプリミティブに変換しようとするわけではありません。

言い換えれば、false に強制される値はほんの一握りで、これらは falsy (偽値) と呼ばれる値です。それ以外の値は truthy (真値) と呼ばれます。値が truthy (真値)であるかどうかは、論理演算子や条件文と共に使われるとき、あるいはあらゆる真偽値の文脈で使われるときに重要です。

JavaScriptで型強制と同じ効果を得るには、2つの方法があります。

  • 二重否定: !!xx を 2 回否定し、上記と同じアルゴリズムで x を論理値に変換します。
  • Boolean()関数、つまり Boolean(x) は上記と同じアルゴリズムを用いて x を論理値に変換します。

なお、truthy / falsy であることは、論理値プリミティブ truefalse緩く等しい (==) こととは異なることに注意してください。

js
if ([]) {
  console.log("[] is truthy");
}
if ([] == false) {
  console.log("[] == false");
}
// [] is truthy
// [] == false

[] は truthy ですが、false と緩く等しいです。すべてのオブジェクトは truthy であるため、[] も truthy です。しかし、プリミティブである false と比較する場合、 []Array.prototype.toString() によって "" というプリミティブに変換されます。文字列と論理値を比較すると、どちらも数値に変換され、どちらも 0 になるので、[] == falsetrue となります。一般に、falsy であることと == false は次のようなケースで異なります。

  • NaN, undefined, null は falsy ですが、 false と緩く異なります。
  • "0"(および "" ではないが 0 に型強制される 他の文字列リテラル)は truthy ですが、false と緩く等しいです。
  • オブジェクトは常に truthy ですが、そのプリミティブ表現は false と緩く等しくなる可能性があります。

truthy な値が true と緩く等しくなる可能性はさらに低いです。すべての値は truthy か falsy のどちらかですが、ほとんどの値は truefalse のどちらとも緩く異なります。

コンストラクター

Boolean()

新しい Boolean オブジェクトを生成します。

インスタンスメソッド

Boolean.prototype.toString()

このオブジェクトの値に応じて、文字列で true または false のどちらかを返します。 Object.prototype.toString() メソッドを上書きします。

Boolean.prototype.valueOf()

Boolean オブジェクトのプリミティブ値を返します。 Object.prototype.valueOf() メソッドを上書きします。

Boolean オブジェクトを初期値 false で生成

js
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 で生成

js
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

関連情報