JavaScript: プリミティブ型とオブジェクト型の値を比較
JavaScript のデータ型には大きくわけてプリミティブ型とオブジェクト型の2つがあります。 例えば、'hello' という文字列を表す変数も、 プリミティブ型とオブジェクト型の2通りで表せます。
プリミティブ型(文字列型)で表す場合は
var str = 'hello';
オブジェクト型(String)で表す場合は
var obj = new String('hello');
ではこの2つの変数の値を「==」等値演算子、「===」同値演算子で比較してみた場合どうなるでしょうか?
var str = 'hello';
var obj = new String('hello');
console.log(str == obj); // true
console.log(str === obj); // false
「==」等値演算子の場合は、オブジェクト型(String)の値は文字列型に変換されて 比較します。ですからこの場合は「true」となります。
一方、「===」同値演算子の場合は、型も含めて比較されるため「false」となります。
このように、同じ文字列を表す場合でも、プリミティブ型とオブジェクト型では 演算子によって結果が異なることを知っておいてください。