Boolean
は関数です。起動タイプによっては、truthy
とfalsy
という異なる動作があります。単純な関数として
1.呼び出し
単純な関数としてBoolean(value)
を呼び出すときの引数はfalsy
(false
、null
、undefined
、''
、0
、Nan
)またはtruthy
(すべてのであれば、それを検証します他の値:オブジェクトインスタンス、1
、true
など)。このタイプの呼び出しはboolean primitive typeを返します。
期待どおりに動作します:var b = new Boolean(value)
:
Boolean(null) // prints false
Boolean(0) // prints false
Boolean({}) // prints true
Boolean(-1) // prints true
2.呼び出しJavaScriptで任意の関数と同様に、コンストラクタ
として、Boolean
はコンストラクタとして呼び出すことができます。この呼び出しタイプはboolean object instanceを返します。
JavaScriptはオブジェクトインスタンスをtruthy
の値として扱うので、混乱を招きます。
var b = new Boolean(null);
!!b // prints true, because b is an object instance
if (b) { // b evaluates to true
//executed code
}
2.1なぜコンストラクタが可能であるように呼び出す
JavaScriptは、このコンストラクタの呼び出しは、現像剤をboolean
のプロパティの作成を保存するためのメカニズムを与えることを可能にします。プリミティブブール型はそれに割り当てられたプロパティを保存しません。 Booleanオブジェクトの作業にもかかわらず
にする方法
var booleanObject = new Boolean(null);
booleanObject.foo = 'bar'; // create a property
booleanObject.foo // prints 'bar'
var booleanPrimitive = false;
booleanPrimitive.foo = 'bar'; // create a property
booleanPrimitive.foo // prints undefined
2.2
は、new Boolean(value)
は、比較を行うための機構を有しています。任意のJavaScriptオブジェクトと同様に、それはブールプリミティブ型(truthyとfalsyためfalse
用true
)にvalue
の変換を返すメソッドvalueOf()
有する:条件付きでこの作業を行うに var falsyBoolean = new Boolean(null);
falsyBoolean.valueOf() // prints false, because null is falsy
var truthyBoolean = new Boolean(1);
truthyBoolean.valueOf() // prints true, because 1 is truthy
を、それが必要ですブール値オブジェクトインスタンスの真理値への変換を避ける。 、これを実現する直接比較演算子==
を使用するには:
var falsyBoolean = new Boolean(null);
falsyBoolean == false ? 'falsy' : 'truthy' // prints expected 'falsy'
if (falsyBoolean == false) {
//executed code
}
==
演算子のオペランドは、オブジェクトや他のプリミティブ型である場合は、JavaScriptが実際にvalueOf()
メソッドを呼び出すことで構成され、プリミティブ型、に変換しbooleanオブジェクトthis articleで詳細を参照してください。
3.どのように混乱しないように
最高のルールは、すべてのオブジェクトのインスタンスとしてBoolean
を使用しないことです。 Boolean(value)
または!!value
は、変数真理状態を検証するのに十分です。
期待通りに動作する '!Boolean(false)'を使用してください。 –
ブール値(オブジェクト)がオブジェクトではなくブール値(プリミティブデータ型)になるのはなぜですか? Boolean(オブジェクト)はブール値(プリミティブデータ型)のオブジェクト表現です。 – IMTheNachoMan