簡単な例:
var a = "";
var b = new String(a);
var c = new String(a);
alert(a==b); // true
alert(a==c); // true
alert(b==c); // false
問題は何ですか? しかし、実際には、変数bとcはオブジェクトであり(それらは異なります)、 aはプリミティブ値(文字列リテラル)です。 2つのオブジェクト変数は、異なるオブジェクトを参照する場合、等しくないと見なされます。 プリミティブ値とオブジェクトを比較するとき、他のルールが使用されます-すべてが文字列に縮小されてから比較されます。
これは何でいっぱいですか? 非常に微妙な間違いがたくさんあります。 プログラマーの観点から見ると、文字列型のプリミティブ値とString()コンストラクターによって文字列から作成されたオブジェクトは事実上区別できません。多くの本でさえ、この瞬間は具体的な例なしで言及されています。
状況は、他のプリミティブ型および対応するオブジェクト(Numberなど)と同様です。
2つの変数を比較するときは注意してください!