概要:このチュートリアルでは、JavaScriptのBooleanオブジェクトと、Booleanオブジェクトとbooleanプリミティブ型の違いについて学習します。
JavaScript booleanプリミティブ型
JavaScriptは、trueとfalseの2つの値を持つbooleanプリミティブ型を提供します。次の例では、falseとtrueのboolean値を保持する2つの変数を宣言しています。
let isPending = false;
let isDone = true;Code language: JavaScript (javascript)プリミティブなboolean値を保持する変数にtypeof演算子を適用すると、次の例のようにbooleanが返されます。
console.log(typeof(isPending)); // boolean
console.log(typeof(isDone)); // booleanCode language: JavaScript (javascript)JavaScript Booleanオブジェクト
booleanプリミティブ型に加えて、JavaScriptはグローバルなBoolean()関数(Bは大文字)も提供しており、他の型の値をbooleanにキャストできます。
次の例は、Boolean()関数を使用して文字列をboolean値に変換する方法を示しています。文字列が空ではないため、trueを返します。
let a = Boolean('Hi');
console.log(a); // true
console.log(typeof(a)); // booleanCode language: JavaScript (javascript)Booleanは、booleanプリミティブ型のラッパーオブジェクトでもあります。つまり、trueまたはfalseをBooleanコンストラクタに渡すと、Booleanオブジェクトが作成されます。例:
let b = new Boolean(false);Code language: JavaScript (javascript)プリミティブ値を取り戻すには、次のようにBooleanオブジェクトのvalueOf()メソッドを呼び出します。
console.log(b.valueOf()); // falseCode language: JavaScript (javascript)ただし、BooleanオブジェクトのtoString()メソッドを呼び出すと、"true"または"false"という文字列値が返されます。例:
console.log(b.toString()); // "false"Code language: JavaScript (javascript)JavaScript boolean vs. Boolean
次の例を考えてみましょう。
let completed = true;
let active = new Boolean(false);Code language: JavaScript (javascript)まず、activeはオブジェクトなので、プロパティを追加できます。
active.primitiveValue = active.valueOf();
console.log(active.primitiveValue); // falseCode language: JavaScript (javascript)しかし、completed変数のようなプリミティブなboolean変数では、これはできません。
completed.name = 'primitive';
console.log(completed.name); // undefinedCode language: JavaScript (javascript)第二に、Booleanオブジェクトのtypeofはobjectを返し、プリミティブなboolean値のtypeofはbooleanを返します。
console.log(typeof completed); // boolean
console.log(typeof active); // objectCode language: JavaScript (javascript)第三に、Booleanオブジェクトにinstanceof演算子を適用するとtrueが返されます。ただし、boolean値にinstanceof演算子を適用するとfalseが返されます。
console.log(completed instanceof Boolean); // false
console.log(active instanceof Boolean); // trueCode language: JavaScript (javascript)特に式で使用する場合、Booleanオブジェクトを使用しないことをお勧めします。混乱を招く可能性が高いためです。例:
let falseObj = new Boolean(false);
if (falseObj) {
console.log('weird part of the Boolean object');
}Code language: JavaScript (javascript)スクリプトの動作。
- まず、
false値のBooleanオブジェクトラッパーとしてfalseObjを作成します。 - 次に、
if文でfalseObjを使用します。falseObjはオブジェクトであり、JavaScriptエンジンはそれをtrueのboolean値に強制変換します。その結果、ifブロック内のステートメントが実行されます。
次の表は、JavaScriptのBooleanとbooleanの違いをまとめたものです。
| 演算子 | boolean | Boolean |
|---|---|---|
typeof | boolean | boolean |
| object | instanceof Boolean | false |
true
異なる型の値をBoolean型に変換するにはBoolean()関数を使用することをお勧めしますが、プリミティブなboolean値のラッパーオブジェクトとしてBooleanを使用することは避けてください。