概要:このチュートリアルでは、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)); // boolean
Code 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)); // boolean
Code language: JavaScript (javascript)
Boolean
は、boolean
プリミティブ型のラッパーオブジェクトでもあります。つまり、true
またはfalse
をBoolean
コンストラクタに渡すと、Boolean
オブジェクトが作成されます。例:
let b = new Boolean(false);
Code language: JavaScript (javascript)
プリミティブ値を取り戻すには、次のようにBoolean
オブジェクトのvalueOf()
メソッドを呼び出します。
console.log(b.valueOf()); // false
Code 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); // false
Code language: JavaScript (javascript)
しかし、completed
変数のようなプリミティブなboolean変数では、これはできません。
completed.name = 'primitive';
console.log(completed.name); // undefined
Code language: JavaScript (javascript)
第二に、Boolean
オブジェクトのtypeof
はobject
を返し、プリミティブなboolean値のtypeof
はboolean
を返します。
console.log(typeof completed); // boolean
console.log(typeof active); // object
Code language: JavaScript (javascript)
第三に、Boolean
オブジェクトにinstanceof
演算子を適用するとtrue
が返されます。ただし、boolean値にinstanceof
演算子を適用するとfalse
が返されます。
console.log(completed instanceof Boolean); // false
console.log(active instanceof Boolean); // true
Code 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
を使用することは避けてください。